Я сегодня изучал индекс TIOBE, как делаю часто, и как часто делает большинство из тех профессиональных программистов, которых я знаю. Он претендует на измерение популярности языков программирования в мире, а его график изменения популярности со временем рассказывает простую историю: Java и C с незапамятных времён остаются королями языков с большим отрывом.

Но, погодите-ка, давайте не так быстро. Конкурирующий список PYPL Index (PopularitY of Programming Languages) говорит, что королями являются Python и Java, а C (учитываемый, внезапно, совместно с C++) находится где-то в глубине списка. Что происходит?

Просто у двух этих списков очень разные методологии подсчётов. Однако их объединяет одно – спорность их методологий, если учитывать, что их целью является измерение популярности языков программирования. TIOBE измеряет просто количество запросов в поисковике. PYPL измеряет, как часто люди гуглят обучающие материалы по тому или иному языку.

Обе эти меры плохие. Можно ожидать, что доступность онлайн-ресурсов будет очень отстающим индикатором. У популярного когда-то языка, теперь преданного забвению, должны остаться миллионы старых веб-страниц, посвящённых ему, полумёртвых сайтов и записей в блоги, которые никто не читал годами. А поиски обучающих материалов должны склоняться к тем языкам, которым обучают студентов. Эта мера не имеет отношения к тому, какие языки реально часто используются профессионалами-практиками.

В числах этих рейтингов есть множество аномалий. Если верить TIOBE, в прошлый раз C взлетел от самого низкого места в рейтинге до языка года за пять месяцев. Я могу поверить, что С возрождается за счёт встраиваемых систем. Но я так же легко могу представить, что этот взлёт произошёл за счёт недостатков далеко не идеального метода измерения.

Более вопиющая аномалия в обеих рейтингах – относительная эффективность Objective-C и Swift, двух языков, на которых пишут нативные приложения для iOS. Я могу поверить, что в сумме они испытывают некоторый упадок перед лицом популярности таких кросс-платформенных альтернатив, как Xamarin и React Native. Но я с трудом верю в то, что после четырёх лет раскрутки Swift компанией Apple – с моей точки зрения, языка куда как более лучшего — Objective-C остаётся более популярным и широко используемым. Я на работе сталкиваюсь с разными приложениями для iOS/tvOS/watchOS, и беседую со множеством разработчиков для iOS. Очень редко удаётся найти человека, который до сих пор не перешёл с Objective-C на Swift.

Однако истории из жизни данных не заменят, правда? Если бы с этими методологиями конфликтовал только мой личный опыт, я бы заключил, что он просто подпорчен ошибкой отбора. И я бы спокойно это сделал, если бы только не существовало другой методики измерения популярности языков программирования. Я говорю о ежегодных отчётах GitHub, где указываются пятнадцать наиболее популярных языков программирования, используемых на этой платформе. И эти числа идеально совпадают с моим опытом, и серьёзно расходятся с заявлениями TIOBE и PYPL.

Согласно отчётам GitHub от 2016 и 2017 годов, наиболее популярный язык программирования в мире, причём с большим отрывом, это Javascript. На втором месте идёт Python, на третьем Java, а на четвёртом Ruby. Это резко контрастирует с TIOBE, где указываются Java и C, а потом, с большим отрывом, Python и C++ (Javascript вообще на восьмом месте). И с PYPL, заявляющим о таком порядке: Python и Java, большой отрыв, потом Javascript и PHP.

Очевидно, что числа GitHub не отображают всю профессиональную область на 100%. Их выборка очень крупная, но касается только проектов с открытым кодом. Однако хочу отметить, что GitHub – единственный рейтинг, где Swift оказывается более популярным, чем Objective-C. Из-за этого он выглядит гораздо убедительнее. Однако его выборка, основанная на открытом коде, делает его не определяющим.

Эта статистика на самом деле имеет значение, а не просто удовлетворяет любопытство и предоставляет некую информацию об индустрии. Язык – это ещё не всё, но он всё-таки имеет значение. Люди определяют, какие языки им изучать, какую работу искать и чем заниматься, на основании их популярности и их относительной ценности в будущем. Поэтому немного неприятно, что три этих методики измерения так сильно, так радикально отличаются. К сожалению, нам, судя по всему, придётся довольствоваться гаданием на чайных листьях вместо чётких цифр.

Комментарии (269)


  1. Stalker_RED
    02.10.2018 15:10

    Для начала неплохо бы уточнить определения. Что такое популярные, и чем они отличаются от распространенных или разрекламированных? Можно ли считать популярным язык, который никому не нравится, но о нем приходится иногда гуглить, потому что его внедрила в свои продукты БольшаяКорпорация™?


    1. artskep
      02.10.2018 15:16
      +1

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


      1. Djeux
        02.10.2018 15:20

        Если делать перепись, то не удивлюсь что на первое место выйдет PHP благодаря категории «пару раз перед сном дома CMS написал по мануалу». Относить ли такую категорию к программистам дело вторичное.


        1. avraam_linkoln
          02.10.2018 15:51

          Я думаю PHP выйдет на второе место, если искать по вакансиям)


          1. artskep
            02.10.2018 17:05
            +1

            Первая моя мысль после прочтения статьи была «че же не померить по вакансиям». Но, увы, это тоже ошибка выборки — на разных технологиях может быть разная текучка кадров. В суровом энтерпрайзе Джавы трудится куча народа, но из-за того, что это суровый энтерпрайз, количество открытых вакансий может не отражать количество реально трудоустроенных (и, как результат, пишуших) на Джаве.

            Вобщем, только перепись. Причем не добровольная, а принудительная (ибо фанаты новых языков могут устроить хайп, а труженик того же энтерпрайза забьет на любой опрос, ибо семью кормить надо, а не фигней страдать). А это, очевидно, утопия.


            1. Source
              03.10.2018 13:35

              Надо в следующую перепись населения включить вопрос: "На каких ЯП Вы программируете?" xD


              1. NetBUG
                03.10.2018 15:39

                И «Сколько раз в неделю» =)


              1. sumanai
                03.10.2018 17:04

                Можно без дополнительного вопроса, писать в графу "Религия".


                1. Source
                  04.10.2018 14:36
                  +2

                  Не, для этой графы надо оставить табы vs пробелы.


        1. Cryvage
          02.10.2018 21:30
          +2

          Так надо чтобы человек не только указал языки, на которых он когда-то писал, но и в каком объёме, в каком году последний раз, и насколько активно/профессионально он занимается разработкой. Можно ещё указывать отрасль: web frontend, web backend, enterprise, open source, embedded, mobile и т.д. И конкретный фреймворк. Страну тоже было бы неплохо, т.к. рынок в разных странах может сильно различаться. Отдельно ещё можно указать, какие языки изучал в ВУЗе, и в каком году, чтобы знать насколько обучение релевантно рынку, и как ситуация меняется. Вот тогда статистика будет не только интересной, но и полезной. Сразу будет понятно на чём фокусироваться, если хочешь попасть в определённую отрасль. Частично такие корреляции и так очевидны и общеизвестны, вроде javascript/frontend или java/enterprise. Но всё же хочется больше подробностей. Например, какой процент C++ программистов используют, скажем Qt. Использует ли современный enterprise в значимых количествах, например, Python или Go. Какое количество Java программистов экспериментирует с Kotlin, и сколько перешло на него в реальных проектах. И т.д. В общем много всего интересного можно было бы увидеть.


          1. Skerrigan
            03.10.2018 10:55

            Чисто в рамках примера ответа по перечисленному перечню вопросов:
            Java-dev-QA-Full-stack — пишу на Java(jdk8, jersey, hibernate, maven, gradle, webdriver, javascript), PHP (v7.x, smarty, composer, phpquery, safemysql), JS (ES6, webpack, babel, npm, jQ, vue) вкупе с препроцессингом (less/scss). Базовые познания в android sdk (могу во «фрагменты», могу в «активити»).
            Работаю практически каждый день, локально/удаленно — без разницы.
            Учился на радиофизическом, в программирование пришел из поваров. РФ.


          1. Free_ze
            03.10.2018 11:49

            какие языки изучал в ВУЗе, и в каком году, чтобы знать насколько обучение релевантно рынку

            Обучение популярным языкам программирования — это не задача вуза, поэтому отразит лишь популярность некоторых языков среди преподавательского состава.


          1. Arranticus
            03.10.2018 18:34

            Есть неплохая выборка от StackOverflow:


            1. romashko_o
              03.10.2018 18:58

              Выборка потерялась куда-то.

              Выборка по технологиям за 2018 год
              image


          1. YemSalat
            04.10.2018 21:39

            Брр, напомнило как я загран паспорт менял…


      1. 3aicheg
        03.10.2018 03:51
        +1

        Не логичнее ли, тогда уж, считать по совокупному числу юзеров всех написанных на том или ином языке программных продуктов? Тоже, правда, непонятно, как считать, да и метрику нужно продумать более основательно — иначе каждый балл за Джаваскрипт, например, будет стабильно давать баллов по десять за C++ какой-нибудь (ну, там, на чём написан браузер, ОС, веб-сервер, серверная ОС, вот это вот всё). Зато отсеются все эти «пару раз перед сном CMS по мануалу».


      1. Habra_nik
        03.10.2018 18:34

        Может лучше посмотреть, за что больше платят? Или на каком языке можно писать в течении нвиболее продолжительного промежутка времени, не переучиваясь (тут си победит с большим отрывом).
        Бльше людей пишут код — в средней школе все писали на бейсике так-то, не показатель.


      1. MacIn
        04.10.2018 17:44

        Пишут или произведено кода вообще когда-либо? Во втором случае — чем более старый язык, тем больше на нем кода и больше людей им пользовались (в среднем, при прочих равных). В первом — за какой период учитывается написание кода?


  1. greabock
    02.10.2018 15:14
    +2

    Думаю, что питон даже не топ 3. 4й или 5й должен быть.

    P.S.
    А еще, у меня нет ни одного знакомого, который бы умел в руби, ни то чтобы прям писал на нем.


    1. DaneSoul
      02.10.2018 16:05

      (Про Python) По использованию в коммерческой разработке — вполне вероятно Вы правы. А вот как язык которым хоть как-то владеют — я думаю он сейчас будет одним из первых, так как очень многие современные программы обучения (Coursera, Udacity, Stepic и т.д) начинают именно с него.


      1. greabock
        02.10.2018 16:35

        Ну вот голосование, на текущий момент, показывает, что питон-то «о-го-го»… видимо, я (и еще два человека) неправильно думаю )


      1. tmin10
        03.10.2018 17:20

        С моей точки зрения, сейчас любят начинать учить с JS.
        Небольшой личный опыт: мой друг-медик скачал какое-то обучающее программированию приложение и там был именно JS как язык, на основе которого объясняют основы.


    1. sentyaev
      02.10.2018 21:53

      Популярность еще очень зависит от страны и даже города. Где-то Python рулит, где-то Java. А смотреть в среднем по больнице смысла нет.
      Тут скорее важно количество вакансий в том регионе где ищешь работу.


    1. queses
      03.10.2018 01:08

      В последнее время популярность языков программирования определяю очень просто — беру популярную площадку с вакансиями (для нас hh, для США Dice) и пробиваю в поиске названия языков. По количеству вакансий можно определить наиболее востребованные языки.
      Так вот Python как раз попал в топ-3 (и даже топ-2). Возьмём, к примеру, вакансии на Dice в Калифорнии:
      1. Java: 2,428
      2. Python: 1,798
      3. JavaScript: 1,163 (из них около 400 на NodeJS)
      4. C: 834 (в выборку попали вакансии, совмещённые с C++)
      5. C++: 771 (в выборку попали вакансии, совмещённые с C)
      6. C#: 639
      7. PHP: 295 (кто писал про популярность PHP?)
      8. Swift: 151


      1. bulavin
        03.10.2018 06:46

        цифры на upwork будут значительно отличаться и php там топ1 с большим отрывом :)


      1. peresada
        03.10.2018 07:45

        Возьмите выборку по Китаю, и там PHP разорвет все другие языки. Возьмите выборку по России, и тут как-то все более сбалансировано. Возьмите выборку по Индии — тоже удивитесь.


        1. JekaMas
          04.10.2018 19:41

          Вы про java забыли в Китае.
          Весь стэк Али*** — это java


      1. paratagas
        03.10.2018 12:28

        Я тоже так делаю, но заметил, что такой подход обычно имеет определенную долю искажения выборки из-за того, что некоторые языки указываются, как дополнительные. Скажем, вы вводите в поиске «Python» и получаете часть вакансий для специалистов C++ или Java, где Python указан, как дополнительный навык. То есть вывод получается такой: если знаете C++ или Java (и Python), хорошо, приходите, но если не знаете C++ или Java (но знаете Python), вы нам не подходите. То же верно и для JavaScript, например. Он часто указывается как доп. навык на большое количество позиций, где основной профиль — другой язык. Еще интересна судьба SQL по выборкам на вакансии. Много где указывается «MySQL», «PostgreSQL» и т.д. Мы понимаем, что любая из этих СУБД подразумевает знание SQL, но малое употребление в вакансиях именно «SQL» формально снижают позицию этого языка в умозрительном рейтинге. Особенно, если поиск на сайте с вакансиями заточен под точное соответствие вводимому запросу.


    1. kuftachev
      03.10.2018 02:14

      Python и Ruby популярны в Пиндостане, при этом в Европе PHP в разы больше.


      P.S. У меня есть две знакомых, которые писали на Ruby, один пока был в Пиндосии, второй дома в Украине.


      P.P.S. Java — study once work everywhere!


      1. MamontsevDS
        03.10.2018 08:36
        -1

        Стесняюсь спросить, а Пиндостан — это где? Можете на карте показать?


        1. unabl4
          03.10.2018 14:56

          Что там показывать-то? США это. Руби ещё более-менее как-то «жив» в США. Питон популярен везде более-менее равномерно.


          1. mapron
            03.10.2018 21:44

            Мне кажется, комментатор выше знает это. Намек был просто на принятый нейтральный стиль общения на Хабре.


            1. JC_IIB
              03.10.2018 21:48
              +2

              Зато «пиндостан» — отличное слово-индикатор. Такое же отличное, как, например, «хомячки».


          1. kuftachev
            04.10.2018 01:02

            По вакансиям в Европе я бы так не сказал. Тут PHP зависит от страны, но обычно минимум в раза два больше, чем Python.


    1. Krypt
      03.10.2018 14:25

      Я никогда не писал на Ruby, но, тем не менее, гитхаб считает, что у меня есть несколько проектов на нём. На самом же деле это служебные репозитории пакетного менеджера.


    1. KEugene
      04.10.2018 08:36

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


  1. sintech
    02.10.2018 15:22
    +2

    Я не совсем программист. Объясните пожалуйста зачем состоявшимся разработчикам изучать колебания популярности тех или иных языков программирования? Какие выводы они сделают про изменениях? Перепишут весь код на другом языке?


    1. Djeux
      02.10.2018 15:24
      +1

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


      1. ilitaexperta
        02.10.2018 19:18

        перейти на другой язык
        Люди пишушие на одном языке — макаки, а не разработчики. Нормальный разработчик выбирает язык и тулсет под задачу


        1. Djeux
          02.10.2018 20:21
          +6

          В идеальном мире да. В неидеальном есть компании, а у компании продукты, и никто не будет тратить лишние деньги на поддержку новой инфраструктуры из-за того что язык А быстрее языка Б на 5% в конкретной задаче.
          Я вот как-то не встречал еще в своей жизни спецов, которые абсолютно одинаково (с точки зрения качества кода) могут писать на нескольких языках.


          1. ilitaexperta
            02.10.2018 20:35
            -10

            никто не будет тратить лишние деньги на поддержку новой инфраструктуры из-за того что язык А быстрее языка Б на 5% в конкретной задаче.
            А если на 50% больше прибыли, то будет. В любом случае ваш пример к моему коменту отношения не имеет.

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

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

            Senior PHP Engineer
            Неудивительно.

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


            1. Djeux
              02.10.2018 20:40
              +1

              Неудивительно.

              Бог ты мой, как только я осмелился на тему ИТ говорить со спецами на «тру» языках, все ухожу ухожу.


            1. Am0ralist
              02.10.2018 22:37
              +4

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


              1. ilitaexperta
                03.10.2018 04:11
                -5

                А в чем я не прав? Если человек находится на том профессиональном уровне, на котором изучение новых языков\технологий представляет для него проблему, то он обладает низкой квалификацией. Вы будете с этим спорить?

                Ну да, многим обидно осознавать себя на этом уровне. Ведь мы курсы по фронтенду закончили, на первую работу устроились, мы теперь востребованные сверхлюди! А он нас макаками назвал! С этим я не могу ничего поделать.


                1. peresada
                  03.10.2018 07:51

                  Изучить другой язык, если хватает квалификации, не трудно. НО, попробуйте объяснить бизнесу, что:
                  — Вам нужно время, чтобы адаптироваться к языку (синтаксис, ключевые методы-операторы-функции, специфики)
                  — Вам нужно время, чтобы вникнуть в предметную область
                  — Вам нужно время

                  Или иначе, попробуйте объяснить семье, что вам нужно 2-3 месяца по вечерам, чтобы перейти на новый язык, поэтому вы будете снимать квартиру и жить отдельно это время.

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


                  1. Sklott
                    03.10.2018 09:10

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


                    1. Neikist
                      03.10.2018 09:20

                      Ммм… А для написания простейших вещей точно нужен специалист? Я в целом придерживаюсь мнения что завязываться на одной технологии неправильно и нормальный специалист должен быть способен на уровне мидла подходы, библиотеки, технологии и т.п. освоить новые за пару-тройку месяцев, но то что можно освоить за пару недель — разве что в простых вещах применить можно будет.


                    1. peresada
                      03.10.2018 09:22

                      Разве речь идет о простейших вещах? Не помню источник, но в одной статье говорилось, что программист работает на треть менее эффективно на новом языке программирования. Я и имел ввиду следующее, что для бизнеса задержка релиза на условный месяц чаще всего будет критичней, чем увеличение производительности на 5% или простоты поддержки на 10%.


                    1. amelekhin
                      03.10.2018 10:03
                      +1

                      Приглашаю вас за 2-3 дня разобраться в Rust или OCaml.


                      1. potan
                        03.10.2018 12:32

                        Ну я на OCaml примерно столько и потратил.
                        Правда, я уже знал Haskell…


                      1. 0xd34df00d
                        03.10.2018 16:46

                        В Idris.


                      1. a_e_tsvetkov
                        03.10.2018 18:34

                        Да не вопрос.

                        Семантика владения в Rust далеко не рокет сайенс.

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

                        По мне так любой программист должен владеть хотя-бы одним функциональным языком, а зная один освоить другой не сложно.


                    1. cyberly
                      03.10.2018 10:19

                      А если там другая парадигма? Скажем с ООП перейти на функциональное программирование? А с императивного на декларативное? И вообще, можно 2-3 дня потратить только на то, чтобы незнакомый стек заставить работать на своей машине. А еще незнакомые фреймворки, незнакомые инструменты разработки… Я допускаю, что Hello World по мануалу на чем угодно делается достаточно быстро, но это не «разобраться».


                      1. Mine
                        03.10.2018 13:26

                        Как парадигма может быть «другой» для специалиста? Если ты не можешь мыслить в разных парадигмах, то ты, как утверждали выше, — макака.


                        1. IvanNochnoy
                          03.10.2018 13:32

                          «Специалист подобен флюсу, полнота его одностороння»

                          Козьма Прутков


                          1. Mine
                            03.10.2018 13:52

                            Ты сказать-то что хотел?


                            1. IvanNochnoy
                              03.10.2018 14:08

                              Sapienti sat


                    1. bopoh13
                      03.10.2018 10:57

                      Стандартный вопрос: сколько лет и на каких языках вы пишите?


                      1. Sklott
                        03.10.2018 12:29
                        +1

                        Хм… Ну ладно.
                        ~30 лет.
                        Языки в примерном порядке их изучения:
                        8080 assembler
                        Basic
                        C
                        8086 assembler
                        Pascal
                        C++
                        Prolog
                        ARM assembler
                        Java
                        Perl
                        Ruby
                        Python

                        Не изучал «глубоко», но вполне понимаю и способен поправить программы на PHP и Javascript.
                        Может что еще забыл…

                        Понятно что сейчас я пользуюсь в основном актуальными языками, для меня это:
                        C/C++
                        Java
                        Python
                        Иногда Ruby, но только для своих собственных проектов


                        1. potan
                          03.10.2018 12:42

                          Из неимперативных присутствует Prolog, но это достаточно экзотический в наше время язык. Какой у Вас опыт его использования?
                          С++ — есть опыт серьезного использования boost? Все остальное достаточно слабо работает с типами, переход на язык, в котором типы данных играют более существенную роль будет вызывать затруднение.
                          Что бы утверждать, что теперь совсем любой язык будет учиться за 2-3 дня надо попробовать освоить Idris, Mercury и Rust. Или сразу ATS.


                          1. splav_asv
                            03.10.2018 12:58

                            2-3 всё же это слегка недобор. 2-3 дня это только синтаксис + некоторое понимание как и что идиоматично пишется. Реально всё же надо хотябы неделю. 2-3 дня поиграться, пару дней почитать исходники приличных проектов, и 1-2 практики — руку набить.

                            P.S. Субъективно: после Haskell и Rust — читать код с Boost слегка… неприятно, наверное. ИМХО Haskell вполне достаточно для представления о приличной системе типов.


                            1. 0xd34df00d
                              03.10.2018 16:50

                              Только она там неприличная. Хотя с чем сравнивать, конечно.


                              1. JC_IIB
                                03.10.2018 17:27

                                Мы помним, что в некоторых языках вполне себе выполняется выражение 1+'1'-1, давая на выходе 10.

                                p.s. про «попробуйте за 2-3 дня разобраться в Idris» — это зачет :)


                          1. Sklott
                            03.10.2018 13:21

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

                            Так получилось что с boost-ом я практически не знаком, т.к. в момент его расцвета ушел с головой в Java-у, а вернулся уже на С++11/14 где смысла приплетать boost насколько я понимаю практически нет (возможно для каких-то задач он и сейчас актуален, я не знаю, в наших проектах его нигде нет).

                            Честно говоря все эти слова " Idris, Mercury и Rust. Или сразу ATS.", кроме Rust-а мне ничего не говорят, так что время тратить не хочется, но если там нету кардинальной смены парадигмы (типа как в функциональных языках), то всё еще не вижу почему их нельзя изучить, ну пусть не за 2-3 дня, но за неделю две, как меня тут поправляют.


                            1. DelphiCowboy
                              03.10.2018 14:08

                              Если и взлетит, то Fussy Prolog с нечёткой логикой.
                              А классический Prolog ограничен в практическом применении из-за его строго бинарной логики.


                            1. potan
                              03.10.2018 14:20

                              Idris и ATS — языки с «зависимыми типами», концепцией, которую понять не просто.
                              В Mercury есть линейные типы, на которых сделан ввод/вывод (что позволило не тащить в логический язык много императивщены).
                              Меcто Prolog сейчас начинают заменять системы удовлетворения ограничений и SMT-солверы. Тоже, кстати, нетривиальная тема.


                              1. 0xd34df00d
                                03.10.2018 16:51

                                Концепция завтипов предельно проста, её правильно и идиоматично применять непросто.


                            1. 0xd34df00d
                              03.10.2018 16:52

                              Ну, в C++11, 14 и 17 буст нужен, например, для mpl/fusion/hana, или для всяких более прикладных вещей вроде boost.graph или там multiindex какой-нибудь.


                          1. 0xd34df00d
                            03.10.2018 16:51

                            Почему «сразу ATS»? Он же проще. Есть императивность, завтипы ограничены ЕМНИП.


                        1. bopoh13
                          03.10.2018 18:30

                          Большой опыт! Перепишите конструкцию c Python на Ruby:

                          [x for x in range(3, n, 2)]
                          Или вот, на Lisp-е научитесь писать этот код за 3 дня?


                          1. 0xd34df00d
                            03.10.2018 18:36
                            +1

                            Научитесь генерировать этот список через рекурсивные схемы за 24 часа.


                          1. Sklott
                            04.10.2018 09:33

                            А чего тут сложного-то в Ruby?
                            Да, там нет list comprehension, но можно все тоже самое сделать стандартными функциями и/или лямбдами.
                            Конкретно для этого выражения эквивалент:

                            (3...n).step(2).to_a

                            Насчет Lisp-а, честно говоря я в него глубоко не вникал, но на поверхностный взгляд я не вижу чем он принципиально отличается от динамических языков программирования (тех-же Python, Ruby), но при этом имеет соврешено человеко- нечитаемый синтаксис. Т.е. я понимаю, что это был практически первый язык программирования и его синтаксис в первую очередь обусловлен простотой парсинга, а не простотой для понимания человеком. Но работать на таком сейчас…

                            Возможно есть какие-то современные IDE, которые делают эту кашу читаемой, могу ошибаться но насколько я в курсе для Lisp даже нормального бесплатного компилятора нет, не говоря про IDE. Поэтому в ту сторону даже смотреть не собираюсь. Опять-же на мой взгляд вся сложность программирования на Lisp — это «превозмогание» его синтаксиса, а не какие-то концептуальные вещи…


                            1. bopoh13
                              04.10.2018 21:00

                              Вопросов нет! Вы точно за 2-3 дня сможете начать писать на новом языке.
                              0xd34df00d, благодарю, но я ещё не дорос.


                            1. splav_asv
                              04.10.2018 21:08

                              GNU CLisp — не подойдёт на роль компилятора?


                              1. Sklott
                                05.10.2018 08:37

                                Подойдет конечно, был не в курсе, как я уже писал в сторону Lisp-а, я не особенно смотрел. Просто использовал относительно недавно программку написанную на Lisp-е в описании которой говорилось, что компилиться она только коммерческими компиляторами.


                  1. rjhdby
                    03.10.2018 10:30

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


                1. DrPass
                  03.10.2018 08:03

                  А в чем я не прав? Если человек находится на том профессиональном уровне, на котором изучение новых языков\технологий представляет для него проблему

                  А если он уже находится на том уровне, когда изучение каких-то новых языков/технологий банально не представляет для него интереса? Зачем тратить время на очередную свистоперделку, изучать её, если можно за это время продвинуть свои проекты на известной платформе, или там позаниматься любимым хобби. А свистоперделка все равно через год-два выйдет из моды, и на её место три других придет.


                  1. Sklott
                    03.10.2018 09:15

                    Ну продолжайте забивать гвозди микроскопами, кто вам мешает.

                    Приведу пример из реальной жизни:
                    У нас в проекте одним китайским товарищем была написана программка для генерации ресурсов в необходимом формате, по сути конвертер, на Java. Программка была замечательно написана с точки зрения ООП, такая развесистая клюква на 10+ классов и несколько тысяч строк кода.
                    Я заменил всю эту лабуду простенькой программкой на python в 200 строк кода, которая стала гораздо проще в понимании и дальнейшей поддержке.


                    1. DrPass
                      03.10.2018 09:29
                      +2

                      Приведу пример из реальной жизни:

                      У вас же пример не забивания гвоздей микроскопами, а обычного оверинжиниринга. Я в жизни не поверю, что на Java нельзя было уложиться в сопоставимый с пайтоном объем кода (пусть не столько же, ну в полтора раза больше, а не в десять-двадцать раз). При желании, естественно.
                      А в остальном, я действительно многократно убеждался, что менять фреймворки/платформы для своих проектов — неважнецкая идея. Годится только в том случае, если выбранный изначально был корявым и/или нестабильным. В остальном затраты на изучение/перенос/адаптацию к фичам практически никогда не окупаются. Поэтому можно смело пропускать все обновления, и только когда приходишь в новый проект, разбираться с тем фреймворком/платформой, которые актуальны для него и в текущий момент времени.


                      1. Sklott
                        03.10.2018 09:44

                        Тут наполовину проблема была не в оверинжиниренге как таковом, а в паре концептуальных вещей:
                        1) Чтобы в Java работать с набором данных нужно как минимум завести класс (можно конечно не заводить, но это только все ухудшит), и зачастую добавлять в него какие-то «стандартные» вещи (copy constructor, equals, и т.п), а в pythone это несколько строк без «стандартного» мусора если надо именно класс, или вообще можно использовать tuple/dict.
                        2) Java не очень хорошо подходит для эффективной работы со строками. Да, там есть все аналоги того что можно сделать в python, но делается это все не так просто и элегантно.

                        И да, забыл сказать, инженер который писал эту программу точно знает python, т.к. в проекте есть много python скриптов многие из которых писал он, но Java была выбрана (по моим ощущениям, может я ошибаюсь), из-за того что ресурсы используются в Java приложении (Android), и он возможно просто тупо не знал как из питона их записать в файл чтобы из Java потом прочитать.


                    1. playnet
                      04.10.2018 13:05

                      А что со скоростью выполнения работы? С одной стороны java довольно любит ресурсы, с другой — питон интерпретируемый и без С вставок и/или какого PyPy работает он не особо быстро.
                      Думаю, на go получилось бы сопоставимо по объёму, но быстрее по скорости…


                      1. Sklott
                        04.10.2018 14:38

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

                        В данном случае даже смысла нет делать какое-то профилирование, т.к. различия в скорости не заметны «невооруженным взглядом», а модель использования такова (редкий запуск, для подготовки данных), что выигрыш даже в несколько секунд никого не волнует.

                        Но могут быть случаи когда даже при значительном ухудшении производительности (но опять-же в разумных приделах), но если при этом например код удобнее использовать (например, не надо JVM) и/или удобнее сопровождать, то это может быть оправдано.


                  1. zzzmmtt
                    03.10.2018 10:41

                    Да и язык, на котором данный специалист пишет, вполне себе может развиваться, соответственно поднимать свою квалификацию можно в узкой области. Ну и попутно можно изучать смежные технологии. Тот же PHP взять, язык растёт, меняется, есть куда расти и разработчикам, попутно можно (а зачастую необходимо) изучать SQL (как сам язык, так и особенности его реализации в различных СУБД), NoSQL, системы кеширования, AMQP, да много чего ещё. И внезапно, знает разработчик 1 язык, квалификация у него высокая, но он макака. Илитни эксперты видимо умеют и на фортране с коболом, и на си с плюсами, и на руби с пайтоном одинаково хорошо писать, у них есть время на изучение новых языков, а в перерывах между всем этим они развлекаются написанием программ на брэйнфаке, а во сне (они вообще спать то успевают?) — им видится чистый байткод.


                1. 0xd34df00d
                  03.10.2018 16:48

                  Изучать другой язык — не проблема. Я как-то освоил идрис, у меня в планах полноценно освоить агду (что должно быть легко) и coq (что будет чуть менее легко), и потом пойти упарываться в сторону совсем маргинальщины вроде какого-нибудь zombie, что уже граничит с достаточно теоретическими исследованиями (если посмотреть, зачем этот zombie создавался, например).

                  А вот какой-нибудь питон я патологически не воспринимаю и писать на нём не могу и не буду.


                  1. JC_IIB
                    04.10.2018 13:47

                    Чистое любопытство — а в чем корень нелюбви к питону, что с ним, по-вашему, не так?


                    1. Sklott
                      04.10.2018 14:18

                      Ну вот я например предпочитаю Ruby чисто из-за синтаксиса, честно говоря идея сделать форматирование текста программы частью его синтаксиса кажется мне немного «странной».


                    1. 0xd34df00d
                      04.10.2018 16:32

                      Отсутствие статической типизации с ним не так (ну и просто куча возможностей сделать что-нибудь неявное, от всяких декораторов до магических __get__ или как их там).


                      Я, в принципе, одинаково не люблю почти все языки без статической типизации, просто мнение о том, что PHP или JS прям супер языки, встречается куда реже. Говорили бы так про тот же PHP, я бы его в пример приводил.


                      1. ilitaexperta
                        04.10.2018 18:54

                        Почему динамическая типизация это плохо? И почему статическая лучше? Это как ложка и вилка.

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

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

                        JS/PHP откровенное говно. Но говно потому что делались левой пяткой на коленке, с кучей косяков by design.


                        1. JC_IIB
                          04.10.2018 19:48
                          +1

                          Удержаться было просто невозможно. Искренне прошу не принимать написанное на картинке на личный счет, это просто гэг.

                          Заголовок спойлера
                          image


                          1. khim
                            04.10.2018 21:16

                            Ну и да, даже говноскрипты можно писать на Haskell, мне вот недавно поведали сие тайное знание.
                            Можно и на Go, кстати. У Android билд-система с python на Go переезжает.



                          1. ilitaexperta
                            05.10.2018 02:15

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


                            1. Free_ze
                              05.10.2018 11:22

                              xxx: Народ! Какая ОС лучше: Windows 8 или Linux Mint 14?
                              yyy: Что лучше, ложка или вилка?
                              zzz: Вилка, ей суп интересней есть.
                              from bash.{org|im}


                        1. 0xd34df00d
                          04.10.2018 23:42

                          Динамическая плоха тем, что семантические ошибки в вашем коде выявляются внезапно динамически.


                          Ну, тот класс задач, который удобно решать без статической типизации, я решаю на шелле. У меня так ~/backup.sh написан, например, там просто последовательность вызовов rsync.


                          А вот дойдут руки у меня почистить музыкальную коллекцию от пустых папочек, в которых есть только cover.jpg и cover.bmp, я это на шелле писать не буду. И на питоне не буду.


          1. Virviil
            03.10.2018 00:11
            +3

            Мой личный опыт позволяет мне с вами согласится. И даже скажу больше — обычно люди пишут на нескольких языках "на одном языке".
            Очень хорошо видны Рубисты в Питоне, Питонисты в Руби, Джависты в СиШарпе и ПХПшники в любом другом языке. Видны любители функциональщины, любители стак-оверфлоу, Гошники и Сишники.
            В настоящее время я кручусь в основном в Эликсирах кругах, и отличить пришедшего из Руби от пришедшего из Эрланга могу с 10 строк.


            Совершенно очевидно, что выбранный стиль будет хорошо ложиться только на один язык.


            Но стиль это еще пол разговора. Вторая половина — это экосистема языка. Новые библиотеки и решения появляются каждый день. Если ты полгода не писал на языке — ты безнадежно отстал. На слабенького мидла оценить можно. Потому что твои знания о том как сейчас пишут, на каких технологиях и т.д. устарели на полгода (а еще ты все забыл). Вышла новая версия фреймворка. Поменялся шаблонизатор или ОРМ. Умерли библиотеки по крипте, а оставшиеся сменили API. И ты будешь хуже того, кто все это знает.


            1. DelphiCowboy
              03.10.2018 07:56
              +2

              Новые библиотеки и решения появляются каждый день. Если ты полгода не писал на языке — ты безнадежно отстал. На слабенького мидла оценить можно. Потому что твои знания о том как сейчас пишут, на каких технологиях и т.д. устарели на полгода (а еще ты все забыл). Вышла новая версия фреймворка. Поменялся шаблонизатор или ОРМ. Умерли библиотеки по крипте, а оставшиеся сменили API

              А что фреймворк в больших проектах меняют каждые полгода?!
              И сеньор, который не меняет постоянно библиотеки и фреймворки на новомодные уже и не сеньор?!
              Типа «пох на дедлайн! лучше время на миграцию на очередной фреймворк потратить, чем на доведение до релиза! заниматься исправлением багов — это для лохов!»?!


              1. MacIn
                04.10.2018 18:00
                +1

                Угу, я вот смотрю на свое место работы, где основной продукт — на Delphi, миллионы строк кода и ведет свою родословную из ЕМНИП 1983 года. И прямо вижу, как мы раз в квартал меняем фреймворки и платформы…


            1. sentyaev
              03.10.2018 09:45

              И даже скажу больше — обычно люди пишут на нескольких языках «на одном языке».

              1. Линтеры.
              2. Code review. Но на самом деле каждый проект имеет свой уникальный стиль, и сложнее привыкнуть к этому стилю, чем и стилю языка.

              Вторая половина — это экосистема языка. Новые библиотеки и решения появляются каждый день. Если ты полгода не писал на языке — ты безнадежно отстал.

              Если говорить об основных библиотеках и фреймворках вроде web фрейворка, ORM, то практически нет разницы для какого он языка. Основные концепции одинаковые, ключевые слова одинаковые. Разница чисто косметическая.
              Про всякую мелочевку — а зачем тут что-то изучать, открыли доку и веред. Все равно нужно будет ее адаптировать под проект.


            1. playermet
              03.10.2018 10:31

              > И ты будешь хуже того, кто все это знает.
              1) А долго ли, или первая неделя покроет 95% всех действительно важных для разработки знаний?
              2) А какой процент фреймворка знают наизусть те кто на нем писали все эти пол года?

              Очевидно, что в среде где все меняется каждые пол года настолько, что любой спец становится максимум слабым миддлом, как пишущий на языке постоянно так и пропустивший пол года из гугла не будут вылезать оба. Ведь изменение в любом конкретном аспекте могли произойти хоть вчера, а значит твои знания в любом конкретном аспекте нужно проверять на актуальность прямо сейчас. И завтра тоже. И послезавтра. А то вдруг фреймворк обновился.


          1. playnet
            04.10.2018 13:00

            > икто не будет тратить лишние деньги на поддержку новой инфраструктуры из-за того что язык А быстрее языка Б на 5% в конкретной задаче.

            Когда конкретная задача считается месяцами и более, и пишется 1 раз а потом просто работает то 5% на 1000 серверов это минус 50 серверов. Которые можно не покупать, если оценка скорости выполнена заранее, например на небольшой выборке на паре серверов, или пойти под другие задачи. Или просто — их выключить и как ЗИП использовать + экономия энергии + меньше работы всяких инженеров, если такая предусмотрена. Ну или задачу можно посчитать на эти 5% быстрее.

            Неактуально для систем, которые постоянно меняются.


        1. areht
          03.10.2018 00:13
          +2

          > Нормальный разработчик выбирает язык и тулсет под задачу

          Я так понимаю, вы знаете все языки и тулсеты?


          1. ilitaexperta
            03.10.2018 01:49
            -2

            Я так понимаю, вы не можете разобраться с новым языком\тулсетом за разумное время?

            Я конечно понимаю, что сейчас стало нормой быть Senior Js и считать себя профи, а после изучения TypeScript вообще запускать ЧСВ в небеса. Но только это не значит, что Senior Js это какойто хайквалифаед разраб или вообще сеньер. Это обычный формошлеп, только с модной лычкой.

            Просто общий уровень разрабов настолько просел, что выбор языка под задачу, огромное количество людей считают за фантастику! Просто вдумайтесь в это.


            1. areht
              03.10.2018 02:39

              > Я так понимаю, вы не можете разобраться с новым языком\тулсетом за разумное время?

              То есть я сначала должен как-то выбрать под задачу язык и тулсет, а только потом изучать? Толково.

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


              1. ilitaexperta
                03.10.2018 03:58
                -2

                То есть я сначала должен как-то выбрать под задачу язык и тулсет, а только потом изучать? Толково.
                Нужно иметь широкий кругозор и большой опыт, или изучать предметную область и возможные решения перед решением задачи. Если первого нет, а со вторым проблемы, идите учитесь.

                Кстати, а что вы делаете, когда к вам через неделю приходят и слегка изменяют задачу так, что ваш язык перестал подходить?
                Задача меняется слегка, а язык перестал подходить полностью. С логикой проблемес? В любом случае решения принимаются изходя из разумных пределов.


                1. areht
                  03.10.2018 04:22

                  > Нужно иметь широкий кругозор и большой опыт

                  Этого то хоть жопой ешь!

                  > В любом случае решения принимаются изходя из разумных пределов.

                  изходя из разумных пределов принимаются какие решения? Переписать на другом тулките с нуля? Дописывать вторую половину задачи на другом языке? Решать задачу не на том языке, на котором надо?

                  > Задача меняется слегка, а язык перестал подходить полностью.

                  Ну как «полностью»… я на любом тьюринг-полном языке могу задачу решить. Но вы же про какие-то другие критерии выбора языка под задачу?


                  1. ilitaexperta
                    03.10.2018 04:32
                    -3

                    Вы ударились в демагогию, вместо аргументов.

                    Этого то хоть жопой ешь!
                    Если бы это было правдой, этого спора бы не было

                    изходя из разумных пределов принимаются какие решения? Переписать на другом тулките с нуля? Дописывать вторую половину задачи на другом языке? Решать задачу не на том языке, на котором надо?
                    Во всех трех кейсах вы вышли за границу разумного

                    Ну как «полностью»… я на любом тьюринг-полном языке могу задачу решить. Но вы же про какие-то другие критерии выбора языка под задачу?
                    Напишите на 1С рендер 3D-движка под Android, и чтобы не меньше 60 fps


                    1. areht
                      03.10.2018 05:23
                      +1

                      > Во всех трех кейсах вы вышли за границу разумного

                      Ну то есть опыта большой заказной разработки у вас нет?
                      Только не надо отвечать «жопой ешь», надо отвечать на «Кстати, а что вы делаете, когда к вам через неделю приходят и слегка изменяют задачу так, что ваш язык перестал подходить?». Ну, если есть что.

                      > Напишите на 1С рендер 3D-движка под Android, и чтобы не меньше 60 fps

                      Оплачивать на карточку удобно?


                      1. ilitaexperta
                        03.10.2018 05:28

                        Зависит от конкретной задачи, сроков и оплаты. И того, что значит перестал подходить в вашем понимании

                        Лучше приведите конкретный кейс

                        Оплачивать на карточку удобно?
                        Оплата по факту выполнения


                        1. areht
                          03.10.2018 14:47

                          По обоим пунктам видно, что фрилансер. Это многое объясняет.


                          Задача — неконкретная, срок — вчера, оплата -почасовая.


            1. PashaNedved
              03.10.2018 03:42

              Гипотетически, я тот самый «формошлёп», пришедший в индустрию зарабатывать деньги. Зачем мне изучать другие языки, если я знаю js? Если js не подходит для каких-то задач, значит надо его адаптировать под эти задачи :) Проще добавить халявный ffi и уменьшить размер v8, чем обучить армию «формошлепов».

              Вышеописанное не претендует на истинность и не отражает моего мнения, я постарался взглянуть на ситуацию со стороны бизнеса.


              1. ilitaexperta
                03.10.2018 03:54
                -3

                А где я сказал что формошлепу надо обязтельно изучать другие языки? Если его устраивает формошлепить и получать свои n денег, пусть работает так и не развивается. Только по существу он будет третьесортной макакой.

                Мы же не считаем и не называем гастарбайтеров, высококвалифицированными уважаемыми инженерами? Почему тогда должны считать формошлепов синьерами? :)


                1. Vilaine
                  03.10.2018 08:04

                  не считаем и не называем гастарбайтеров, высококвалифицированными уважаемыми инженерами

                  Но и третьесортными макаками мы их не считаем. А разнорабочие у вас, получается, неуважаемые?


                1. playermet
                  03.10.2018 10:41

                  > Почему тогда должны считать формошлепов синьерами?
                  А с каких пор «синьер» стало употребляться вне конкретного стека технологий, и начало обозначать сферического спеца во всем? Даже если человек знает один только BASIC шестидесятых, но при этом пишет на нем в разы качественней и быстрее подавляющего большинства других программистов, то это по определению значит что он Senior BASIC Developer.


                  1. Mine
                    03.10.2018 14:21

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


                    1. khim
                      03.10.2018 16:13

                      Да с самого начала так употреблялось.
                      С самого начала — это когда? В 50е годы прошлого века? А что вы помините о тех временах, извините? Или вы рассуждаете о событиях случившихся до вашего рождения?

                      Это потом уже макаки так расплодились, что сеньоров стало не найти.
                      Первый «большой» раскол на три лагеря — это Кобол vs Фортран vs Лисп. Условно «бухгалтера», «математики», «искусственный интеллект». С тех пор — разделение усугубилось и попытка объединить физиков и лириков, в общем, провалилась. «Не взлетело».

                      И вот уже 60 лет нет в природе сеньоров, готовых писать на чём угодно — да и не нужны они.

                      А то, что вы тут рассказываете — это обычная спесь: давайте запишем всех кто работает в другой области (ну там 1С-программисты или математики со своим MathLab'ом) в «ненастоящие» программисты — и будем упиваться собственной крутизной.


                      1. 0xd34df00d
                        03.10.2018 16:58

                        Только фортран — это скорее про физиков, а не про математиков. Подставлять числа в плюс-минус-умножить-поделить математикам в среднем давно не очень интересно.


            1. tmin10
              03.10.2018 17:27

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


            1. Free_ze
              03.10.2018 17:32

              Не язык нужно выбирать, а платформу.

              Наглядно это видно по .NET, где безраздельно доминирует C#, хотя платформа задумывалась именно с прицелом на многоязычность.


            1. YemSalat
              04.10.2018 21:53

              Просто общий уровень разрабов настолько просел, что выбор языка под задачу, огромное количество людей считают за фантастику!

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


        1. kuftachev
          03.10.2018 02:08

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


          Конечно если у человека основной какой-то Ruby, то у него и выхода нет, а если человек пишет на Java, то зачем ему знать что-то ещё?


          Конечно для общего развития полезно просматривать соседние технологии, но в общем...


          Как раз сегодня было два разговора.


          Один собеседник (синьор Java, правда из-за денег выучил Древний Эльфийкский — Perl) возмущался, что человек, которого называют архитектором, на Java сравнивает строки через ==. Вот я как раз и говорил, что человек просто знает много языков и получает кашу в голове.


          А второй (архитектор, знает много языков, но строки сравнивает правильно), говорил, что если задачу лучше писать на Haskell, то нужно выбирать его, но мои возражения были в том, что на Java точно можно решить почти все, кроме системных задач, и точно можно найти адекватных специалистов, которые сделают это, а вот на Haskell можно что-то решать, если есть готовая команда в офисе и идеи, где ещё брать людей при случае.


          Так что, нечего людей называть макаками.


          Вот больше проблема, что я вот часто встречаю, что люди не представляют как работает компьютер.


          1. ilitaexperta
            03.10.2018 03:48
            -2

            Людей я макаками и не называю

            Один собеседник (синьор Java, правда из-за денег выучил Древний Эльфийкский — Perl) возмущался, что человек, которого называют архитектором, на Java сравнивает строки через ==.
            Когда я был в относительно юном возрасте, я тоже удивлялся как руководитель команды на наших курсах по Java не знает, что в ней нету дефолтных аргументов методов. Только спустя время, я понял насколько это мелко и неважно. Этот архитектор, над незнанием костылей джавы которого вы смеетесь, сделает любоую вашу задачу проще и быстрее чем вы. А вам, чтобы делать и понимать на должном уровне его задачи потребуются годы практики.

            архитектор, знает много языков, но строки сравнивает правильно
            Не нужно знать много языков, нужно знать основные концепции. Все языки делятся на большие группы, внутри которых отличия между ними минимальны, а если для вас не минимальны, значит минимальны ваши знания в IT. Ваш архитектор на голову вас выше профессионально. И он прав, если задачу проще и дешевле сделать на Haskell, надо делать на Haskell. Другое дело что таких задач исчезающе мало.

            на Java точно можно решить почти все, кроме системных задач
            Ой, да, серьезно?.. Написать качественное приложение для iOS, клиентскую часть сайта, любые задачи связанные с перфомансом(рендер, геймдев, реалтайм вещи), красивый и нетормозной десктопный софт нетребующий отдельно тащить vm, быструю систему сборки или интерпретируемый скрипт на джаве написать вменяемо не получится. То что получится, будет выглядеть как забивание винтов молотком, так же осмысленно и качественно. Джава хорошо решает ограниченный круг задач, еще часть задач решает плохо и криво, а часть задач не решает вообще.

            если человек пишет на Java, то зачем ему знать что-то ещё?
            Этот перл можно в рамочку на стену вешать. Вы же заперты внутри своей JVM-клетки, в которую сами себя посадили. Сегодня вы пишите бекенд, завтра приложение под андроид, а послезавтра вам нужно будет кусок кода на плюсах через NDK переписать, потому что джава тормозит, и все, ваши руки связаны, для вас это оверскилл. Но это оверскилл только для второсортных разработчиков.

            А если нужен клиент для iOS? А если web-клиент? А если нужен простой скрипт для работы с файлами? А если игра? Вы ограничены, как пятиклассник, который говорит «зачем мне эта математика в жизни нужна?»

            Зачем знать что-то еще? Да просто чтобы иметь возможность писать что-то кроме тормозного и энтерпрайзного говна.

            Вы как строитель, который молотком умеет пользоваться, а отверткой нет. Это смешно. А то, что вы этого не понимаете, это страшно.

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


            1. khim
              03.10.2018 05:02

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

              А знаете ли вы хотя бы что такое call/cc? Зачем исользуется оператор отсечения в прологе? Как устроена система типов в Хаскеле? Или как реализовать новые конструкции языка в Форте? А ведь это всё — центральные вещи, вокруг которых всё построено в этих языках! И без их знания вы будете всего лишь «писать программу на ФОРТРАНЕ используя любой язык»…

              И он прав, если задачу проще и дешевле сделать на Haskell, надо делать на Haskell. Другое дело что таких задач исчезающе мало.
              На самом деле как раз задач, которые проще и дешевле сделать на Haskell — очень и очень много. Не используют его из-за высокого порога вхождения, а так же из-за того, что люди, изучившие Haskell за пару недель будут его использовать, в лучшем случае, как плохой C++, плохую Java или плохой PHP.

              А если нужен клиент для iOS? А если web-клиент? А если нужен простой скрипт для работы с файлами? А если игра? Вы ограничены, как пятиклассник, который говорит «зачем мне эта математика в жизни нужна?»
              Скорее он ограничен как токарь, который для литья болванки скорее обратится к литейщику, чем будет пытаться изучить как правильно формы из песка делать.


              1. ilitaexperta
                03.10.2018 05:18

                А знаете ли вы хотя бы что такое call/cc? И без их знания вы будете всего лишь «писать программу на ФОРТРАНЕ используя любой язык»
                Я нигде ниразу не увтерждал что все знаю, и не рад, если так кому-то показалось. Я говорил про общеупотребимые промышленные языки, понятро что есть еще куча маргинальных, которые практического интереса не представляют

                Не используют его из-за высокого порога вхождения, а так же из-за того, что люди, изучившие Haskell за пару недель будут его использовать, в лучшем случае, как плохой C++, плохую Java или плохой PHP.
                Ну вообще то это и значит что делать на Haskell дороже

                Скорее он ограничен как токарь, который для литья болванки скорее обратится к литейщику, чем будет пытаться изучить как правильно формы из песка делать.
                Между токарем и литейщиком намного больше разницы, чем между программистами пишушими на разных языках, зачастую отличающихся синтаксисом и набором фреймворков


                1. khim
                  03.10.2018 05:32

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

                  Ну вообще то это и значит что делать на Haskell дороже
                  Да, но его дороговизна проистекает не из каких-то его врождённых недостатков, а просто из того, что на рынке C++ программистов (хорошо изучить который не проще, чем Haskell) больше.

                  Между токарем и литейщиком намного больше разницы, чем между программистами пишушими на разных языках, зачастую отличающихся синтаксисом и наборот фреймворков
                  Ошибаетесь. У нас в проекте на C++ как-то был бывший Java-программист, довольно продуктивный, в принципе. Однако последствия года его работы пришлось расхлёбывать почти три года, так как всё, что он делал, было заточено под Java. У которой, как известно, JIT. Который может инлайнить функции на лету, когда видит, что какие-то из них часто вызываются. А в C++ — так не работает! Там статический компилятор! Он должен всё во время компиляции видеть, иначе ничего оптимизировать невозможно!

                  В результате пришлось вначале извести тот «задел на будущее», который он оставил — а потом реализовать всё то, подо что он «оставил задел» правильно — так, как это на C++ делается. Некоторые компоненты в 10 ускорились!

                  P.S. Есть ощущение, что переход с C++ на Java не будет таким разрушительным, так как «подход C++» в Java в принципе нереализуем. Но проверок на практике я не делал, так что категорично утверждать не буду.


                  1. ilitaexperta
                    03.10.2018 05:47

                    Да, но его дороговизна проистекает не из каких-то его врождённых недостатков
                    Скорее из-за того, что все привыкли думать в императивном ключе, а преимущества функционального полхода далеко не для всех задач перекрывают недостатки

                    А общеупотребимые промышленные языки отличаются друг от друга настолько слабо
                    У нас в проекте на C++ как-то был бывший Java-программист, довольно продуктивный, в принципе. Однако последствия года его работы пришлось расхлёбывать почти три года, так как всё, что он делал, было заточено под Java.
                    Так это языки так слабо отличаются, или разработчики так сильно? Вы противоположные вещи пытатесь доказть

                    Есть ощущение, что переход с C++ на Java не будет таким разрушительным
                    Коненчо, тут же наоборот переход от сложного к простому, хотя тоже отпечаток оставляет на некоторое время.


                    1. khim
                      03.10.2018 16:28

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

                      У нас в проекте на C++ как-то был бывший Java-программист, довольно продуктивный, в принципе. Однако последствия года его работы пришлось расхлёбывать почти три года, так как всё, что он делал, было заточено под Java.

                      Так это языки так слабо отличаются, или разработчики так сильно? Вы противоположные вещи пытатесь доказть
                      Просто не нужно писать комментарии когда спать пора.

                      Это не «противоположные вещи», а две «шкалы измерения». Если объективно оценивать результат — то кардинального отличия продукта, написанного хорошими программистами на C# от продукта написанными хорошими программистами на Java не будет. Немножко в другой нише — PHP/Python/Ruby. Но тоже близко. Там тоже результат будет похож.

                      А вот качественное освоение нового языка — занимает кучу времени и сил. При таком раскладе брать людей и заставлять их переучиваться — попросту невыгодно.

                      Чтобы язык было было полезно выбрать под задачу (а не под навыки имеющихся в компании или на рынки людей) — он должен быть сильно другим. Как Форт или Хаскель. Но тут вопрос переучивания — вообще становится катастрофическим.

                      Есть ощущение, что переход с C++ на Java не будет таким разрушительным

                      Коненчо, тут же наоборот переход от сложного к простому, хотя тоже отпечаток оставляет на некоторое время.
                      Если бы оно было просто «сложное» vs «простое»! «Укрощение GC» — это совсем другой навык, нежели работа с «умными» указателями. Тот факт, что JVM «прогревается» и может «ненужный» код «растоплять» в многоуровневых иерархиях функций, но при этом метапрограммирование в компайл-тайм отсуствует напрочь, а в райнтайм — очень даже присутствует в рантайм — диктует совсем другие подходы к структуре программ. И так далее.

                      Хорошая программа на C++ может быть близка к хорошей программе на Java по своим эксплуатационным характеристикам — но устроены они должны быть сильно по-разному.


                1. 0xd34df00d
                  03.10.2018 17:00

                  Ну вообще то это и значит что делать на Haskell дороже

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


              1. ledocool
                03.10.2018 07:05

                >Зачем исользуется оператор отсечения в прологе?
                Справедливости ради, пролог это такая вещь в себе, ни на что промышленно используемое не похожая.


                1. khim
                  03.10.2018 16:31

                  И именно поэтому, когда у вас возникнет задача, хорошо ложащаяся на Prolog вы трижды подумаете перед тем, как раскнёте его использовать — так ведь?

                  Именно потому, что логичесткие построения можно на любом языке изобразить, а вот «Material Design» на про Prolog'е вы замучаетесь делать.

                  Попытка же совместить Prolog и, скажем, Java, в одном модуле — приведёт к таким пляскам с бубном, что мало не покажется…


                  1. ledocool
                    03.10.2018 19:27

                    И именно поэтому, когда у вас возникнет задача, хорошо ложащаяся на Prolog вы трижды подумаете перед тем, как раскнёте его использовать — так ведь?
                    На самом деле все будет проще — я не буду его использовать. И пожалуй не только потому, что задач хорошо ложащихся на пролог нет (кроме лабораторных по этому самому прологу). А еще потому, что пролог несмотря на смену парадигмы запомнился мне подражанием другим языкам, что привело к переусложнению языка.

                    Именно потому, что логичесткие построения можно на любом языке изобразить, а вот «Material Design» на про Prolog'е вы замучаетесь делать.

                    Попытка же совместить Prolog и, скажем, Java, в одном модуле — приведёт к таким пляскам с бубном, что мало не покажется…
                    В действительности если бы пролог оставлася узкоспециализированной, но хорошо интегрируемой и относительно простой вещью, я бы его использовал. (В современном мире у него была бы ниша как у ассемблера.) А так получается, что создатели пролога работая с детским конструктором решили что кубы лучше окружностей, а потом полезли с этим в автомобилестроение.


            1. Neikist
              03.10.2018 06:50

              И он прав, если задачу проще и дешевле сделать на Haskell, надо делать на Haskell
              .
              А потом возникает необходимость программу доработать, а он уже ушел в другое место. А ближайший человек знающих хаскель запрашивает немалые деньги, и то его найти удалось через пол года только.
              Не забывайте что мы в т.ч. решаем задачу бизнеса, а ему важно в т.ч. насколько просто найти специалиста, насколько быстро другой специалист может что то поправить, есть ли отличия в деплое, настройке и поддержке среды (или у вас этим тоже программист будет постоянно заниматься?).
              Как программист лично я с вами согласен, но если смотреть здраво — такой подход принесет проблемы. Это уж не говоря о том что всегда есть тонкие нюансы в технологии, используемых библиотеках и подобном, на которые специалисты в этой технологии уже наступали и сразу могут обойти. И уж точно нужно помнить что какой бы кругозор ни был — время на вспоминание/обновление/изучение знаний по технологии нужно, а время это деньги и сроки.


              1. ilitaexperta
                03.10.2018 06:52

                если задачу проще и дешевле сделать на Haskell
                Я с вами согласен. Слово дешевле и подразумевает интересы бизнеса в данном моменте


            1. kuftachev
              03.10.2018 09:32

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

              А если нужен клиент для iOS? А если web-клиент? А если нужен простой скрипт для работы с файлами? А если игра? "


              Как можно такую чушь писать?


              Язык — это не только синтаксис, но и знание всех инструментов в его инфраструктуре.


              Но смешивать вообще разные задачи для программирования — это полная чушь! Вот уже точно не будет один человек писать и игры, и десктоп, и мобильные приложения, и клиент, и фронт. Вот такое впечатление, что это Вы наслушались кого-то, кто на самом деле ничего не пишет, а только блоги на Ютубе ведёт!


              Даже в веб фул стек скорее всего или недостаточно бек, или недостаточно фронт. (На днях смотрел код, как больше Беки видят компонентный подход в интерфейсах и это что-то!)


              И вообще, человек изучает программирование, чтобы работать, и поэтому, если он нормально знает Java, то у него не будет проблем с работой ещё минимум лет 10 (если Oracle своими лицензиями его раньше не убьет).


              Тоже самое касается почти любого из основных современных языков, но Java на первом месте на данный момент и уже много лет.


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


              P.S. А кто сказал, что я на Java пишу и знаю один язык? Я ради интереса много чего смотрел в рамках веба, но при этом я понимаю, что это или выбор того, что нравится мне под мои задачи, или просто для общего развития, просто потому, что мне интересно.


              Я понимаю, что факту это только позволяет более обосновано участвовать в холиворах и не повышает мою ценность как специалиста.


              1. shiru8bit
                03.10.2018 10:12

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

                Это не к многогранности личного опыта, а к тому, что реально бывают очень разные люди и ситуации (встречал комбинации и поинтереснее), и категорично заявлять, что никто не будет делать то и то и такого не бывает — не стоит.


              1. 0xd34df00d
                03.10.2018 19:02
                +1

                Язык — это не только синтаксис, но и знание всех инструментов в его инфраструктуре.

                Ух, мощно.


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


                Я ничего не знаю о веб-фреймворках на хаскеле, например. Почти ничего не знаю, как там стучаться к БД.


                Блин, я никаких языков не знаю :(


                Не, вы потом, конечно, про это пишете, но я тогда не очень понимаю, что такое все инструменты.


          1. Sabubu
            03.10.2018 09:17

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

            На собеседовании таких любителей прыгать по верхам вычислить несложно: они назовут вам много баззворд-слов, но на вопрос рассказать подробно про плюсы и минусы той или иной технологии толком ответить не могут.


            1. Murat1992
              03.10.2018 15:37

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

              В вашем примере «человек» плохой не потому, что он меняет языки, а потому, что он не выдает результат. А из первого, необязательно, следует второе.

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

              А как можно рассказать про плюсы и минусы той или иной технологии(причем подробно), не зная той или иной технологии?


        1. Welran
          03.10.2018 13:49

          Почему то мне кажется что в 99% случаев язык и тулсет под задачу уже выбран и вас наняли что бы писать именно на этом языке и который вы видимо знаете лучше всего раз устроились на эту работу. Ммм дайте-ка вспомнить, когда же мне представлялась возможность выбрать язык для проекта… Никогда :).


          1. khim
            03.10.2018 16:36

            Ммм дайте-ка вспомнить, когда же мне представлялась возможность выбрать язык для проекта… Никогда :)
            Вот здесь, я думаю, вы кривите душой. Обычно выбор есть — но он ограничен налисными ресурсами. В основном специалистами. То есть если вы будете делать приблуду под Android — вы сможете выбирать где тот или иной компонент будет «жить» — в Java-мире, или в C++-мире (потому что и то и другое у вас в проекте, скорее всего, уже есть), но вот засунуть туда ещё и C# — это нужны будут ну ооооччччеееннь веские причины…


            1. DrPass
              04.10.2018 01:11

              но вот засунуть туда ещё и C# — это нужны будут ну ооооччччеееннь веские причины…

              Скорее наоборот. Причины засунуть C# в Андроид-приложение вполне себе будничные — вы хотите получить мультиплатформенный софт, и вам для этого понравился Xamarin. А вот причины писать под Андроид на NDK с C++ часто сводятся к «мне было любопытно» :)
              Но предыдущий комментатор, ИМХО, имел в виду другое — что бОльшая часть программистов в мире всё-таки не системные архитекторы и не руководители, и не принимают решения о выборе платформы и языка. Что начальство сказало, то и взяли.


        1. 0xd34df00d
          03.10.2018 16:46

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


      1. aamonster
        02.10.2018 23:37
        +1

        Э… Языки уже после третьего учатся легко. И вообще язык — ерунда, сколько там занимает описание языка? Вот фреймворк новый изучить — может понадобиться время, просто потому, что много всего учить. Так что — составлять рейтинг по фреймворкам, а не по языкам? (в случае macos/ios — довольно логично, сложно ли переучиться с objc на swift, когда все api одинаковые?)


        1. khim
          03.10.2018 01:27
          +1

          И вообще язык — ерунда, сколько там занимает описание языка?
          Официальный стандарт C++17 — почти полторы тысячи страниц. И это очень сухое описание, без вводных глав и наглядных примеров.


          1. creker
            03.10.2018 04:03

            Это исключение из правил. Рядовой язык вполне быстро осваивается. Да даже плюсы не то чтобы долго будет изучать. В любом случае, куда больше времени занимает освоение идиоматичного написания на этом языке, лучших практик, набор опыта. И тут плюсы вполне релевантны, т.к. освоиться с теми же умными указателями и правильно принимать решение, какой где использовать, это уже посложнее, чем просто научиться новенькие concepts сочинять. И это не говоря уже о конкретный фреймворках.


            1. khim
              03.10.2018 05:14

              В любом случае, куда больше времени занимает освоение идиоматичного написания на этом языке, лучших практик, набор опыта.
              Дык в этом и дело! Если вы «изучите» какой-нибудь C++ и начнёте писать на нём так, как писали на Java — ни к чему хорошему это не приведёт. Вы получите хрень, которая объединит недостатки обоих языков, скорее всего.

              Потому что у C++ — совсем другие идиому и всё совсем по другому реализуется. Хотя бы потому что вместо интерфейсов и наслежлования тут шаблоны и концепты (наследование, впрочем, тоже есть — но из-за того, что в C++ так и не прижились синатуры его роль сильно более ограничена, чем в Java). А в Haskell — у вас алгебраические типы, монады и всё, что вокруг них.

              И если вы будете присать программу на Haskell так же, как вы бы писали её на C++ (а никак иначе человек без опыта не сможет её написать) по указанию «гениального» архитектора — то ничего, кроме проблем, вы не получите…


              1. ExplosiveZ
                03.10.2018 10:45

                Похоже на generics из java.
                // На плюсах никогда не писал


                1. playermet
                  03.10.2018 10:57

                  Синтаксически дженерики и шаблоны похожи. Но работают они совершенно по разному.


                1. khim
                  03.10.2018 16:51

                  Визуально generics в Java и шаблоны в C++ невероятно похожи. Но в современный Java и современном C++ они разошлись радикально.

                  Вот, к примеру, пример прямо из документации:

                  std::tuple<double, char, std::string> get_student(int id)
                  {
                      if (id == 0) return {3.8, 'A', "Lisa Simpson"};
                      if (id == 1) return {2.9, 'C', "Milhouse Van Houten"};
                      if (id == 2) return {1.7, 'D', "Ralph Wiggum"};
                      throw std::invalid_argument("id");
                  }
                   
                  int main()
                  {
                      auto [ gpa2, grade2, name2 ] = get_student(2);
                      std::cout << "ID: 2, "
                                << "GPA: " << gpa2 << ", "
                                << "grade: " << grade2 << ", "
                                << "name: " << name2 << '\n';
                  }
                  Как сделать подобный std::tuple generic в Java? И насколько он будет эффективен? А в современном C++ — это нормальный способ возврата нескольких значений из функции…


                  1. 0xd34df00d
                    03.10.2018 19:09

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


                    template<typename... Ts>
                    auto makeTuple(Ts... ts)
                    {
                        return [ts...] (auto f) { f(ts...); };
                    }

                    куда более эффективен, а что и как он делает, очевидно любому, кто игрался с лямбда-исчислением и Church encodings.


                    get, tuple_cat и друзья потом довольно просто выражаются (и тоже довольно приятно с точки зрения времени компиляции).


                    И да, я писал код, где замена туплов на вот это уменьшала время компиляции файла с 20 секунд до 10.


                    1. khim
                      03.10.2018 19:39

                      И вот тут вы немедленно упираемся в вопрос: а стоит ли уменьшение времени компиляции изобретения своего диалекта языка? Потому что в реальном мире вы, зачастую, в проекте живёте не один и знать про всё, что там бывает, не можете.

                      Вот совсем недавно мы в одном маааахоньком модуле упёрлись в то, что forwarding references примеными ко всем C++ типам — но это не значит, что в C++ программе они могут принять все значения!

                      Догадатесь в чём тут дело?

                      Под спойлером - ответ
                      Получи фашист гранату:
                      template <typename... Args>
                      int ignore_args(Args&&...) {
                          return 0;
                      }
                      
                      int disaster(int buf_size) {
                          char buf[buf_size];
                          return ignore_args(buf);
                      }
                      


                      1. 0xd34df00d
                        03.10.2018 21:25

                        Я не догадался. Но это ничего, потому что в С++ VLA нет. Просто ваш компилятор слишком permissive.


                        1. khim
                          03.10.2018 22:02
                          +1

                          Ну дык эта. В C++ их нет, а в коде они есть. Прелестно, не правда ли?

                          Потому и шансами воспользоваться нестандартными «ускоренными» типами нужно пользоваться очень аккуратно и осторожно.

                          P.S. Кстати этот код принимают и clang и gcc, так что если у вас нет Windows, то шанс заметить эту проблему при беглом взгляде — невелик…


                          1. 0xd34df00d
                            04.10.2018 16:33

                            Кстати этот код принимают и clang и gcc, так что если у вас нет Windows, то шанс заметить эту проблему при беглом взгляде — невелик…

                            Вы что, без -pedantic собираете?


                            1. khim
                              04.10.2018 17:50

                              А чем -pedantic поможет? Как разрешить обычные designated initializers, которые в сотне мест используются, не разрешая при этом VLA?


                              1. 0xd34df00d
                                04.10.2018 18:14

                                Ну вам же даже по вашей ссылке написали, включить С++20.

                                А если серьёзно, включение одних расширений языка так, чтобы не включать другие — вопрос опций вашего компилятора.


                                1. khim
                                  04.10.2018 22:43

                                  А если серьёзно, включение одних расширений языка так, чтобы не включать другие — вопрос опций вашего компилятора.
                                  Да, конечно.

                                  Ну вам же даже по вашей ссылке написали, включить С++20.
                                  Неа. По моей ссылке написано, что это часть C++20 — но если посмотреть сюда, то можно увидеть что только GCC8 поддерживает их как часть C++20. Clang их поддерживает (причём очень давно поддерживает, начиная с версии 3.0, выпущенной в 2011м году), но… только в качестве «поддержки фич C99 в C++». И в GCC — они в том же статусе с версии 4.7 по версию 7.

                                  Соответственно как только вы включаете designated initializers — так тут же «забесплатно» получаете и поддержку VLA…


                                  1. 0xd34df00d
                                    04.10.2018 23:46

                                    Да, конечно.

                                    Кланг с педантиком даже говорит название опции, дающей предупреждения на VLA (мне просто лень открывать wandbox или тестовый файлик на локальной машине снова, чтобы посмотреть, как именно оно называется).


                                    Неа. По моей ссылке написано, что это часть C++20 — но если посмотреть сюда, то можно увидеть что только GCC8 поддерживает их как часть C++20. Clang их поддерживает (причём очень давно поддерживает, начиная с версии 3.0, выпущенной в 2011м году), но… только в качестве «поддержки фич C99 в C++». И в GCC — они в том же статусе с версии 4.7 по версию 7.

                                    Чё-т вы как-то серьёзно слишком мою иронию восприняли.


                                    1. khim
                                      05.10.2018 02:57

                                      Чё-т вы как-то серьёзно слишком мою иронию восприняли.
                                      Профдефомация: просто мы как раз искали способ запретить VLA без запрета designated initializers — и ничего толком не нашли… Хотя надо на clang 8 посмотреть, может там чего изменилось…


                  1. mayorovp
                    04.10.2018 10:04

                    Вот как раз std::tuple не использует никакой хитрой магии, и сделать его в Java довольно просто, с поправкой на ссылочность типа, отсутствие сахара и на ограниченность числа параметров. Кстати, первые две беды в C# преодолели.

                    Реальное расхождение проявляется тогда, когда шаблон начинает делать со своим параметром что-то отличное от «принял-передал-скастовал». Например, обращаться к статическим членам.


                1. mayorovp
                  04.10.2018 09:55

                  Это разные вещи. В дженериках обобщенный код может работать с типом-параметром только так, как это следует из его ограничений. Условно, если известно что T extends Foo — то переменную типа T можно привести к типу Foo. При этом компилируется дженерик один раз, а дальше в той же Java в рантайме вообще все типы-параметры исчезают.

                  В шаблонах с типом-параметром можно работать произвольным образом: обращаться к его статическим членам, вложенным типам, можно вызывать любые методы. Каждый экземпляр шаблона компилируется отдельно. И вообще шаблоны в C++ полны по Тьюрингу и образуют функциональный мета-язык.


              1. 0xd34df00d
                03.10.2018 19:10

                А в Haskell — у вас алгебраические типы, монады и всё, что вокруг них.

                Это ещё подъёмно. А вот семейства типов, функциональные зависимости, GADTs, DataKinds, TypeInType, KindPolymorphism — это уже серьёзно.


            1. lakroft
              03.10.2018 07:15

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

              Так в этом же и состоит изучение языка, разве нет? Или под «изучением» вы имеете в виду «выучил синтаксис и пошел говнокодить»?


          1. aamonster
            03.10.2018 11:05

            Уели.
            Ну… почти: я тут открыл один из драфтов стандарта и вижу, что описание собственно языка заканчивается на 410 странице, а дальше идёт 935 страниц описания библиотеки.
            То, о чём я говорил: основной объём информации для изучения — не язык, а библиотеки и фреймворки.


            P.S. Хотя были и у меня языки, которые выпадали из общего ряда и требовали усилий именно на "въехать в язык". Пролог (ну, тут я в студенческие годы читал, но т.к. вживую не попробовал — так и не понимаю его) и Хаскель (функциональщина — полбеды, а ленивость ведёт к тому, что мне даже сложность алгоритма оценить трудно). Это не прыгать по императивным языкам...


            1. playermet
              03.10.2018 11:25

              что описание собственно языка заканчивается на 410 странице, а дальше идёт 935 страниц описания библиотеки
              В С++ стандартная библиотека это часть стандарта языка. Все «сложные» типы данных вроде строк и динамических массивов находятся в ней. Нельзя писать на плюсах не зная ее, а значить читать придется намного больше чем 400 страниц.


              1. 0xd34df00d
                03.10.2018 19:17

                Для этого достаточно знать, что они есть.


            1. khim
              03.10.2018 17:15

              Ну… почти: я тут открыл один из драфтов стандарта и вижу, что описание собственно языка заканчивается на 410 странице, а дальше идёт 935 страниц описания библиотеки.
              Это фикция. Так же как и в Java. Простейший вопрос: хочу класс MyString. Так, чтобы можно было написать:
                Mystring x;
                system.out.plrintln(x + 5);
              
              Как мне это сделать? Буль-буль, дзинь-дзинь… никак.

              Аналогичный вопрос для C++: как мне сделать свой аналог is_class? Ответ — тот же: никак.

              Правда тут уже веселее: если в Java вы в принципе не сможете сделать ничего, похожего на java.lang.String, то в C++ вы вроде как типа можете сделать нечто похожее на is_class… но оно будет работать не всегда. Именно поэтому реальные компиляторы имеют кучку расширений, которые и позволяют реализовать стандартную библиотеку.

              То, о чём я говорил: основной объём информации для изучения — не язык, а библиотеки и фреймворки.
              Библиотеки и фреймворки — это второй этап, в некотором смысле. Третий — это уже понимание идиом языка. И вот на это могут уйти месяцы, а то и годы (в зависимости от языка).


              1. 0xd34df00d
                03.10.2018 19:18

                Для подавляющего большинства программистов на плюсах необходимость реализовывать is_class примерно такая же, как variant.


          1. 0xd34df00d
            03.10.2018 19:05

            Не пугайте людей, описание самого языка (в смысле PLT) там занимает всего страниц четыреста.


    1. artskep
      02.10.2018 17:12

      Лично для меня: IT's AWESOME!
      Другой рациональной причины быть не может. При выборе языка в работе и карьере популярность бестолковый параметр. Надо смотреть на поддерживаемость, коммьюнити, применимость к конкретной задаче, востребованность на рынке и т. д.
      Это, конечно, несколько связано с популярностью, но вышеперечисленные параметры проще получить из статистики, и более полезны.


    1. rekzi
      02.10.2018 19:13

      Некоторые программные продукты поддерживают скриптовые расширения и автоматизацию. По популярности можно выбрать, какой язык внедрить (ну как один из критериев).
      Ну и как развитие трендов, язык может косвенно свидетельствовать о росте какого-то направления (ну как например, Python в машинном обучении, анализе данных и т.п.).


    1. ra2003
      03.10.2018 01:07

      Один из разрезов мониторинга какие еще языки в тренде, какой следующий язык учить/посмотреть.


  1. IvanNochnoy
    02.10.2018 15:39

    Популярность языка определяется количеством рабочих мест. TIOBE измеряет неизвесно что.


    1. Neikist
      02.10.2018 16:21

      Точно? Как по мне так популярность это то как много разработчиков пользуются + хотели бы пользоваться языком. Например 1с в России очень распространен но мало популярен. PHP вроде в такой же ситуации примерно.


      1. vanxant
        02.10.2018 16:25

        1с в России очень распространен но мало популярен

        Малопопулярен он на хабре, а не в России. Я бы даже сказал «не моден».


        1. Neikist
          02.10.2018 16:37

          По моему (мнению и опыту) многие им чисто ради денег занимаются, а по факту предпочли бы что нибудь другое (и бывает по фану и занимаются чем то другим в свободное время).


          1. vanxant
            02.10.2018 17:15

            Ну вообще я знаю только один язык с платным рантаймом, на котором в том числе по фану прогают — это Mathematica. И ABAP, и Swift, и powershell — это работа ради денежки.


            1. Neikist
              02.10.2018 17:21

              Ну так и мы не популярность ABAP и 1с смотрим, а популярность среди всех языков.


              1. vanxant
                02.10.2018 17:27

                Подозреваю, что в этой стране программистов 1С больше, чем программистов на Java, C++ и PHP вместе взятых. У конторы может ещё не быть даже сайта, но начиная с 10-20 сотрудников с вероятностью 90% 1С у неё уже есть, вместе с как минимум приходящим программистом этой 1С. Где-то с 50 человек уже вероятно in house, и не один.
                Просто часто 1С-программист это не вьюноша пылкий со взором горящим, а солидный такой дядечка, который хорошо умеет в бухгалтерию и бухгалтерш и освоил простейший бейсик для автоматизации формочек.


                1. Neikist
                  02.10.2018 17:43

                  Есть некие сомнения что этому дядечке хоть какие то ЯП и технологии интересны как таковые.


                1. KonkovVladimir
                  02.10.2018 18:49

                  1C программист это скорее тётечка!


                  1. Neikist
                    02.10.2018 19:22

                    Не, если именно нормальный программист — то кто угодно, а если «программист» то как правило парень который катается с обновлениями в случае франча или же показывает какой он сильный программист таская компы. Нисколько не умаляя что такие люди нужны, и возможно как бы не больше чем обычные программисты, но все же именно оттуда, как мне кажется, мифы о «тыжпрограммистах» идут, коих хотелось бы поменьше. Хотя вопрос кого программистом называть сложный.


                1. alsii
                  02.10.2018 20:36

                  Вот-вот… Я тоже подумал, что сначала неплохо бы определиться с терминологией. Например: кто такой программист?


          1. Sabubu
            03.10.2018 09:20

            Большинство людей программированием ради денег занимаются, а по факту предпочли бы что-нибудь другое.


            1. Neikist
              03.10.2018 09:25

              Ммм… Как мне кажется большинство все же не только ради денег. Ну т.е. если бы не платили совсем — да, немногие бы занимались, а в целом например я заканчивал школу с целью поступить в медицинский или экономический, а программирование планировал изучить по фану и заниматься в свободное время (я тогда даже не предполагал что программистов столько нужно, из деревни оно выглядело так что работу программистом найти разве что в москве можно, и то нужно пара тысяч на всю Россию). Справедливости ради на тот момент у меня и компа то не было (2009), а знания программирования ограничивались qbasic.


  1. kvaps
    02.10.2018 15:43
    +1

    Мне кажется что не правильно вот так в лоб сравнивать языки программирования.
    В каждой сфере может быть свой рейтинг.
    Где-то нужно меньше программировать и много думать, а где-то бывает совсем наоборот.
    И под каждую задачу нужно выбирать наиболее подходящий язык а не наиболее популярный, где популярность — это всего лишь один из критериев для выбора.


  1. shiru8bit
    02.10.2018 15:45

    Популярный язык — значит очень большая конкуренция, на нём уже пишут все, кому не лень. Зачем его учить, да ещё в роли догоняющего, вслед за всеми? Пока что история показывает, что специалисты по устаревшим языкам без работы не сидят, и труд какого-нибудь фортранщика хоть и не широко востребован, но вполне достаточно, и оценивается по достоинству. Ну а владеющие C с плюсами и без вообще без дела не сидят уже полвека. Толку им внезапно перепрыгивать на ужасающе популярную Яву или Питон?


    1. Neikist
      02.10.2018 16:23

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


    1. DSolodukhin
      02.10.2018 16:45

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


      1. vanxant
        02.10.2018 17:19

        «Ну вот Delphi один из самых популярных языков, ещё 10 лет назад на нём хоть когда-нибудь писали все, кому не лень. Но при этом разработчиков много, а вакансий ноль»:)


        1. DSolodukhin
          02.10.2018 17:40

          10-15 лет назад Delphi действительно был популярным языком и учили его многие. И работали Delphi-разработчиками, и деньги зарабатывали.
          Исходный вопрос был, зачем учить популярный язык. Ответ очевиден: ради работы.

          P.S. Или это был такой тонкий намек, что Java всё? Ну когда-нибудь да, будет всё, а пока популярно и работу даёт.


          1. Quarc
            02.10.2018 18:16

            Несмотря на то, что Java мне не нравится, я не поверю, что она когда-нибудь вымрет, как и C/C++. Все таки слишком много на них написано и каждый день что-нибудь новое пишется с опорой на уже написанное.


        1. nmrulin
          03.10.2018 01:08
          +2

          Ну вот народ позабудет, тогда на Дельфи опять моду возродят. И будут ждать, пока народ забудет Яву.


    1. RPG18
      02.10.2018 18:34

      Нанимают не за знание языка, а за опыт. Фортран можно выучить, но где набраться достаточного опыта использования этого языка на каких-нибудь мэйнфреймах,


      1. BalinTomsk
        02.10.2018 23:10

        --но где набраться достаточного опыта использования этого языка

        В северной америке все расчеты по моделированию экологических движух исключительно на фортране. Устройтесь куда нибудь в Schlumberger's Water Services Technology Group


        1. RPG18
          03.10.2018 11:24

          Они берут без опыта работы?


          1. BalinTomsk
            04.10.2018 21:11

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

            Вот еще аналогичная: www.weblakes.com


            1. RPG18
              05.10.2018 11:06

              зарплаты слегка ниже чем по рынку.

              Зависит от региона. Например в Санкт-Петербурге найти вакансию на Delphi с зарплатой 140k на руки довольно сложно.


    1. impwx
      02.10.2018 18:35

      Во-первых, большое количество специалистов не означает высокую конкуренцию. Конкуренция — это отношения числа заказов к числу исполнителей, но популярность языка стимулирует появление новых рабочих мест. Найти вакансию для начинающего веб-разработчика явно проще, чем для начинающего COBOL'иста.

      Во-вторых, «догнать» авангард в новых и популярных технологиях гораздо проще. Или что вы предлагаете учить новичку — эзотерические технологии без вменяемой документации и сообщества, или же древние языки, в которых у конкурентов могут быть десятки лет опыта?

      В-третьих, наличие работы у фортранщиков сейчас не дает никаких гарантий на год, два, пять вперед. Рано или поздно в любой компании с древним стеком технологий случится одно из двух — она захочет модернизироваться или закроется. И тогда найти новую работу будет крайне проблематично.

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


      1. shiru8bit
        02.10.2018 18:45
        +1

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

        Не знаю, кому проще догнать авангард. Моё видение на основе собственного опыта — это бесполезное и безнадёжное занятие, т.к. когда догонишь, авангард как-то резко кончается и становится никому не нужен. Классика же почему-то остаётся стабильно востребованной.

        Ничего не даёт никаких гарантий. И про 'любой' и 'или-или' — любые обобщения неверны. Есть очень разные компании с очень разными занятиями.


        1. Alexey2005
          02.10.2018 19:20

          Насчёт востребованности классики — тут всё не так просто. Она ведь востребована не сама по себе, а благодаря своей способности встраиваться во что-то другое, «авангардное».
          Например, кому сейчас нужна «просто Java»? Большинство вакансий — это создание приложений под Android, поэтому те скиллы, которые нарабатывались Java-кодерами в Java ME и прочих древностях, могут быть смело выкинуты ими в мусорную корзину.
          Точно так же никого не интересует «просто PHP», всем нужно знание конкретной CMS, которые к сожалению устаревают. И точно так же играешь в лотерею, пытаясь угадать, на что же тратить время, чтобы быть в тренде.
          И .NET Framework сам по себе уже никому не нужен, всем нужен Unity. Все навыки, полученные при создании WPF под винду, можно забыть, они больше никогда не понадобятся.


          1. shiru8bit
            02.10.2018 19:23

            MIDP, Android, разные CMS, Unity — это всё платформы. А в статье речь про языки программирования. Понять, зачем профессионалы присматриваются к платформам, можно (как раз описанный вами случай — знает Java, ME кончилась, присмотрелся к Android). Зачем присматриваются к популярности языков в отрыве от всего — менее понятно. Причём в статье это подаётся как атрибут профессионала, вот что коробит. Типа, намёк — не следишь за популярностью языков, значит так себе профессионал.


          1. IvanNochnoy
            02.10.2018 19:49

            Навыки, полученные, при написании WPF, понадобятся, если писать кроссплатформенный приложения Xamarin, а так же для UWP, так как они совпадают с WPF на 90%.


          1. usego
            02.10.2018 22:28

            >И .NET Framework сам по себе уже никому не нужен, всем нужен Unity

            Это вброс или вы серьёзно? Куча энтерпрайза плотно сидит на .NETе, так же как и на Java.


          1. Free_ze
            03.10.2018 12:57

            Насчёт востребованности классики… Она ведь востребована не сама по себе, а благодаря своей способности встраиваться во что-то другое, «авангардное».

            Может потому что «авангардное» под капотом работает на «классике»?

            Например, кому сейчас нужна «просто Java»?

            Когда было то славное время, когда не требовались какие-либо нишевые библиотеки?

            Платформы умирают, а универсальные языки находят себе применение.


  1. Neusser
    02.10.2018 15:53

    Некая практическая польза есть у рейтинга «популярности» языков среди вакансий. А сколько людей на каком языке пишет не особо полезная информация с практической точки зрения. И неважно какой методикой измерять.


  1. DrPass
    02.10.2018 15:57

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


    1. aknew
      03.10.2018 11:31

      Она много с чем еще коррелирует — с модностью (чем моднее — тем больше новичков которые ищут решение), с понятностью и полностью мануалов (скажем, при использовании матлаба я крайне редко что-то искал в интернете) и наверняка еще чего можно придумать. Еще есть интересный момент, например, запрос «obj-c  работа с сокетами» на самом деле будет описывать plain c (CoreFoundation как и еще куча низкоуровневых фреймворков имеют интерфейсы на чистом с), но вот запишется ли такой запрос в зачет C большой вопрос


  1. Alert123
    02.10.2018 16:12

    Если судить по стоимости книг, самый популярный JavaScript


    1. paratagas
      03.10.2018 12:46

      Вы имеете ввиду самые дорогие или самые дешевые? Если взять топ дорогих IT-книг на русском, то мне попались в основном по алгоритмам, Java и базам данных. JavaScript-книги по цене подешевле будут.


  1. vanxant
    02.10.2018 16:15

    Мне кажется, единственно верная метрика — число открытых вакансий. Но она, внезапно, регионо-зависимая.
    Метрика гитхаба — по количеству пулл-реквестов — очень сильно сломана. Лидерство JS понятно просто потому, что современный JS это куча мелких пакетов с учебным говнокодом, который обречён ломаться везде и всегда. То MS/Apple выкатит новый браузер с новыми багами, то node — очередной ежемесячный ломающий совместимость релиз. Вот и фиксят.
    Про метрики гуглёжки я даже не хочу говорить, они сломаны ещё больше.


  1. svitoglad
    02.10.2018 16:25

    Вот последний рейтинг по Украине. Си действительно ближе к концу списка. Хоть С++ еще на 6-м месте держится.
    dou.ua/lenta/articles/salary-report-june-july-2018


  1. maslyaev
    02.10.2018 16:35

    В голосовалке не хватает пункта «1С»


    1. Lennonenko
      02.10.2018 19:58

      и kotlin


    1. artemisia_borealis
      03.10.2018 00:29

      и D


  1. wegres
    02.10.2018 17:09
    +1

    Ерунда все эти рейтинги. Если зайти на Тостер, то по количеству вопросов ( т.е. запросов) лидируют теги Javascript — 50806, PHP — 46875, Python — 13467.


    1. riot26
      02.10.2018 17:44

      На количество вопросов как минимум ещё влияют качество документации ЯП и неумение гуглить среднего ЯП-юзера. На большую часть вопросов с тостера отвечают первые 2 ссылки с гугла при правильной постановке.


      1. wegres
        02.10.2018 17:58

        Интересная мысль. Документация что у JS, что у Python — хорошая. И что тогда TIOBE меряет? Если человек не догадался зайти в доки почитать, и задал вопрос в гугл-вот и растёт рейтинг языка. Было бы интересно, если бы этот рейтинг составляли по числу посещений документации ЯП.


        1. splav_asv
          02.10.2018 22:15

          Искать в документации с помощью Google во многих случаях проще. Обычно так и делаю. Google у меня уже дрессированый, первой строкой(максимум второй если в нескольких языках такое есть) нужное выдаёт. А дальше уже по ссылкам в документации.


          1. khim
            03.10.2018 01:38
            +1

            Это, кстати, смещает выборку ещё больше. Ибо про python set я буду искать либо «python set», либо «python 3 set», а вот про C++ — как «std::set».

            В первом случае в запросе есть имя языка, во-втором — нет.


    1. kuftachev
      03.10.2018 02:27

      На Тостере 95% вопросов дошкольного уровня. Ну Вы и критерий нашли!


      1. wegres
        05.10.2018 02:25

        Неизвестно какого уровня запросы в поисковых системах, по которым рассчитывается индекс TIOBE. Может, тоже дошкольного, типа Should I learn PHP or JS?


  1. munrocket
    02.10.2018 18:10

    И в правду какая то ерунда, ваша таблица лучше отображает действительность! Только выборка чуток не репрезентативная.


  1. Ostan
    02.10.2018 19:19

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

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


    1. Alexeyslav
      03.10.2018 11:26

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


  1. svanichkin
    02.10.2018 21:20
    +3

    хз, я как писал на Objective-C так и пишу, на Swift я не переходил и надеюсь не придется


    1. KvanTTT
      03.10.2018 00:30

      Почему надеятесь что не придется?


      1. svanichkin
        03.10.2018 09:38

        Потому что я люблю Objective-C, он красивый, простой, надёжный и родной… а сказать такое же про Swift я не могу – какая там уже по счёту версия swift появилась без обратной совместимости? А как там дела с обертками для сишного кода? А синтаксис этот подобный C/js/as/java/… не утомил ещё никого?


  1. mozomig
    03.10.2018 01:07
    -1

    Где мой Kotlin?


  1. DNL2000
    03.10.2018 01:07

    На чем основаны ваши выводы?


  1. RatWar
    03.10.2018 01:07

    1С очень популярен в России, возможно по кол-ву вакансий на 1-ом месте


  1. kuftachev
    03.10.2018 02:37

    Не думаю, что в обозримом будущем куда-то денутся основные языки, хотя вакансии просматривать нужно.


    Почему-то в комментариях много смеются над PHP, я тоже над ним смеялся, пока не поучил Python, хотя и JavaScript ещё то дитя наркотиков.


  1. hatman
    03.10.2018 02:51

    Все очень зависит от страны использования и правил выборки.

    Например, Python — один из языков, на котором учат программировать. Поэтому он де-факто достаточно популярен. Плюс, в США и других англоязычных странах (Австралия, Канада), на нем делают огромное число различных веб-проектов.

    В то же время, в России — его используют либо большие компании, либо стартапы, которые работают с датой. А большинство сайтов делают на PHP, в то время, как в США ПХП юзают разве что под вордпресс да магнето.

    __

    Если мы подходим к системам учета и ведения документооборота, то в США — это в основном различные решения на Java (местами .net), в России же этот сектор оккупирован 1С (что кстати в разы лучше для малого бизнеса, чем решения на Java).

    Что касается javaScript и С — вообще все сложно. Влияет ли на популярность языка тот, кто что-то учил про C и делает простые скрипты на JavaScript, или это должны быть тру-кодеры, которые пишут на C и Node.js (допустим).

    Например, вот так выглядил рынок СПБ полгода тому назад:

    PHP — веБ

    Общий пул вакансий 525
    Zend — 43 (потолок 200 — 3 вакансий, 100 — 20 вакансий, 80 — 28 вакансии).
    Yii-102 (потолок 215 — 4 вакансий, 100 — 54 вакансий, 80 — 78 вакансии).
    symfony — 85 (потолок 200 — 5 вакансий, 100 — 44 вакансий, 80 — 66 вакансии).
    laravel — 76 (потолок 170 — 4 вакансий, 100 — 42 вакансий, 80 — 54 вакансии).
    Битрикс — 181 (потолок 130 — 14 вакансий, 100 — 27 вакансий, 80 — 62 вакансии).

    Python — динамический язык

    Общий пул вакансий: 596 вакансий
    Теcтирование — 107 (потолок 175 — 8 вакансий, 100- 19 вакансий, 80- 30 вакансии).
    Data — 93 (потолок 245 — 3 вакансий, 150- 13 вакансий, 100- 17 вакансии).
    Devops — 86 (потолок 235 — 1 вакансий, 150- 7 вакансий, 100- 13 вакансии).
    Django — 64 (потолок 240 — 6 вакансий, 150-12 вакансий, 80- 32 вакансии).
    Flask — 25 (потолок 215 — 3 вакансий, 150-8 вакансий, 80- 12 вакансии)
    Tornado — 17
    aiohttp — 5
    Twisted — 4

    Java — дорогой корпоративный сектор

    Общий пул вакансий: 790
    Spring — 175 (потолок 400 — 3 вакансий, 150 — 28 вакансий, 100 — 51 вакансии).
    Android — 235 (потолок 250 — 9 вакансий, 150 — 31 вакансий, 100 — 53 вакансии).
    Теcтирование — 133 (потолок 165 — 5 вакансий, 100- 18 вакансий, 80- 28 вакансии).
    Java EE — 88
    Scala/Kotlin — 27 (19/8)

    C# — дорогой корпоративный сектор под Windows

    Общий пул вакансий: 412 вакансий
    .Net — 313 (потолок 235 — 10 вакансий, 150 — 45 вакансий, 100 — 81 вакансии).
    Asp.net — 153 (потолок 225 — 3 вакансий, 150 — 24 вакансий, 100 — 44 вакансии).
    .Net core — 48 (потолок 395 — 2 вакансий, 150 — 5 вакансий, 100 — 10 вакансии).
    Unity -64 (потолок 225 — 1 вакансий, 150 — 6 вакансий, 100 — 12 вакансии).
    Microsoft Dynamics — 38 (потолок 195 — 3 вакансий, 150 — 4 вакансий, 100 — 7 вакансии).
    Xamarin — 13 (потолок 125 — 2)

    ____

    Ruby -112 вакансий
    Node.js — 171 вакансий
    С++ — 489 вакансий
    1C — 811 вакансий
    Golang — 49

    Т.е. например, Питона много, но по факту он просто упоминается во множестве вакансий, как «хорошо бы было бы знать». Это популярность или нет?


  1. speshuric
    03.10.2018 05:14

    В голосовалке SQL нет :(


    1. haldagan
      03.10.2018 08:33

      И HTML тоже, вот беда…

      Все-таки SQL — это Query Language.


      1. DelphiCowboy
        03.10.2018 09:00

        SQL — это декларативный язык программирования.
        Хотя, в списке есть другие декларативные языки программирования — функциональные.
        Причём, PL/SQL, поддерживающий императивное программирование — тоже в списке отсутствует.


        1. DrPass
          03.10.2018 09:36

          В отличии от них, SQL не является тьюринг-полным. И в общем-то это вспомогательный инструмент. А PL/SQL не попал в список ввиду малого количества разработчиков, естественно.


          1. speshuric
            03.10.2018 21:49

            В SQL:1999 в стандарт введены рекурсивные CTE и вообще-то даже стандартный стал полным по Тьюрингу. При этом аналогичные расширения уже были у некоторых вендоров (Oracle точно, и, кажется, IBM DB/2). При этом T-SQL, PL/SQL и многие другие "расширения" содержали циклы и процедуры (т.е. тоже Тьюринг-полные).
            Так что этот аргумент не состоятелен.


            "Вспомогательность" SQL тоже спорная.


  1. AxisPod
    03.10.2018 09:10

    Как я вижу по современным разделениям
    Самые распространённые — тут и так всё понятно, тут непонятно как оценивать

    Самый востербованный — если оценивать по вакансиям, тут естественно название опять ничего не говорит о реалиях, а говорит о уровне роста востребованности в период времени

    Самые популярные — а это вообще сферический конь в вакууме описывающий сколько из общего числа зачастую не очень умных программистов заинтересовалось данным языком, если оценивать по бордам и вопросам.

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


  1. br0x
    03.10.2018 09:26

    Есть простой и точный способ. Берём 100 программистов, например, комментаторов данного поста, и просим каждого из них составить рейтинг, оценив 5 (по его мнению) наиболее популярных языков баллами от 1 до 10. Статистика даст ответ.


  1. AlexPu
    03.10.2018 09:48

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

    проблемы как обычно три:

    1) администрация linkedIn за подобные исследования хочет денюжку (за исключением случаев, когда такие исследования носят явную социальную направленность. Иными словами могут быть использованы в PR компаниях)

    2) Идея «аккуратности» применения статистический методов исследований как правило непонятна большинству исследователей — в том гипотетическом случае когда некто решит провести такие исследования, все сведется в поиске ключевых слов в профайлах с последующим вычислением средних значений

    3) третья проблема мне неизвестна, но наверняка существует


    1. vanxant
      03.10.2018 14:17

      Третья проблема например в том, что линкедин — гребаные спамеры, которых многие ненавидят? А кое-где вообще забанили на государственном уровне.


      1. AlexPu
        04.10.2018 14:15

        Если кое где банны на государственным уровне чем-то мешщают профессионалам, то этих «профессиналов» можно не учитывать в любой статистике — она (статистика) от этого только выиграет


  1. anonymous
    03.10.2018 10:04

    Нужно разделять:
    1) Я оказываю услуги по написанию корпоративного софта
    2) Я пишу свой софт на продажу
    3) Мне скучно я эксперементирую

    У каждого пункта будет свой стек и язык

    Давайте будем реалистами 90% работает на компанию,90% из этих компаний-это не ит компании
    Бизнесу всегда нужно: универсальность, гибкость и стоимость.
    Мелкий бизнес:
    PHP
    Средний и большой:
    Java или C#

    Т.к нынче щас мода на Веб, то ясен фиг, что Javascript будет везде.

    И вот примерная статистика:
    1) Javascript(так или иначе используется в вебе)
    2) PHP(backend, т.к мелких компаний в разы больше)
    3) Java (универсальность)
    4) C#( ибо Windows окружение)



    1. euroUK
      03.10.2018 18:34
      +1

      Я бы хотел отметить, что C# сейчас — это не только Windows. И что самое смешное, в бенчмарках он уже быстрее Java на Linux.

      C# vs Java on Linux
      Web Framework Benchmarks

      Имхо, сравнивая темпы развития C# и Java, через пару лет C# станет лидером в энтерпрайз секторе.


      1. dplsoft
        04.10.2018 00:12

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

        вы, как минимум, забываете про проблемы обратной совместимости. (вы смешиваете «развитие» и «изменчивость»?). код, написанный 3-5-7 лет назад должен собираться и работать на новых компиляторах точно так же, как и 3-5-7 лет назад на старых компиляторах.
        а этого в шарпах, увы, не происходит. по крайней мере как я вижу. только недальновидный будет вкладываться в большие долгоживущие системы на шарпах в таких условиях.

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

        пока эталонный компилятор создает только майкрософт, шарпы будут жить только там, где его двигает майкрософт, а на всех и вся их банально не хватит.

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


        1. euroUK
          04.10.2018 01:19

          Я конечно спрошу у вас, как давно вы интересовались C#? Компилятор Roslyn — уже давно open source — GitHub Обратная совместимость кода присутствует, проекты 5 летней давности вполне себе собираются.

          Что касается .Net как такового — .Net Core — это действительно лучшее, что произошло за последние лет 10. Это опен сорс ссылка и кросплатформенно, а производительность уже выше вылизанной Java, при этом с каждым релизом она растет.

          Так что ваши взгляды на Майкрософт отстали лет на 5


          1. dplsoft
            04.10.2018 02:18

            >> Компилятор Roslyn — уже давно open source — GitHub
            ну я вам про козлов, а вы мне про баранов. я не говорил про опенсорсность компилятора ну вот совершенно ничего.

            Я смотрю на описание проекта… на майнтейнера… и вспоминаю вышенаписанное мною про то, что

            пока эталонный компилятор создает только майкрософт,…


            Вы знаете — вот у руби тоже компилятор опенсортный. Только «10 его портов и 5 реализаций»… они, конечно, совместимы друг с другом, но код работает на них «немного по разному»; версии майнстрима нарушают обратную совместимость, хотя — (по заявлениям) «всё вроде как собирается».

            Опенсорс — не гарантия и не залог успеха.

            Для сравнения: вспоминаем историю Java: она не была опенсорс насколько я помню. Но у неё была четкая, хорошо документирвоанная модель поведения, набор требований и тестов, процесс сертификации сторонних джава машин. Только на вскидку я могу вспомнть как минимум три джава машины — от Sun, от IBM и от сообщества — OpenJdk.

            В шарпах есть что либо подобное? насколько я знаю нет.

            >> Обратная совместимость кода присутствует, проекты 5 летней давности вполне себе собираются

            и вот опять же… как это доказать? у вас есть стандарты, требования, модель поведения, тесты? как убедиться что у вас — не «хеппи стори выжившего» которому «просто повезло»?
            Как взять результат сборки новым компилятором, прогнать его по официальным тестам требований к старой версии языка — и убедиться что поведение старого кода на новом компиляторе _действительно_ не изменяется на всем поле требований к поведению?

            Не выйдет же, такую проверку устроить с шарпами, ага?

            Что в текущей ситуации остается? верить вам на слово или вашему опыту? ОК, мы верим что вы уверены в своей правоте. А объективно что мы имеем? имееем субъективную точку зрения, предположительно фанатично(?) настроенного разработчика. простите.

            Ну и снова про переносимость и отсутствие четкого стандарта. Понимаете… ну вот сделаю я, для примера, порт Roslyn компилятора и .net машины на эльбрус-процессор… И вот как доказать, что моя дотнет-машина работает точно так-же как на большой официальной десктопной платформе?

            Где стандарты на поведение .net-байткода и процесс сертифкации компиляторов, разработанных не майкрософтом? вы с подобным подходом прогнозируете успех в интерпрайзе, где уже завоевала признание джава? ну ну.

            Говорите у дотнет произволительность выше? да фигня это, извините. железо дешевеет и дешевеет. А вот труд людей, перерабатывающих код — дорожает. Стоимость любого чиха связанного с переработкой кода после выхода очередного компилятора — растет не линейно от объема кода. Потому и вопросы о которых я говрю — крайне серьезны для больших и долгоживущих проектов.

            А майкрософт, простите, не сильно то и чешется в этом направлении особо. Они делают популярный продукт. _популярный_. Понимаете? Как руби, как питон, как js — они с ними фактически конкуриют, не с джавой. Джава «в поп-массовой культуре» не популярна))

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


            1. areht
              04.10.2018 04:10

              кажется, вы в кучу смешали исполнение байткода, компилятор в байткод, совместимость и стабильность.

              энтерпрайзу альтернативные компиляторы, например, зачем?


        1. IvanNochnoy
          04.10.2018 02:04

          Хм… Гугл по запросу roslyn forward compatibility problems выдает только одну статью с очень экзотическим случаем. Похоже, слухи о том, что старый код не компилируется в Roslyn, несколько преувеличены.

          пока эталонный компилятор создает только майкрософт, шарпы будут жить только там, где его двигает майкрософт, а на всех и вся их банально не хватит.

          Теоретически… а на практике МS сделали компилятор как службу еще 4 года назад, а в Oracle до сих пор, как в 95-ом, кроме того, напомню, что Roslyn — open source, так что его не только MS двигает.


    1. AlexPu
      04.10.2018 14:28

      >>Нужно разделять:

      разделять не нужно — речь идет о статистике «популярность языков программирования»

      Вот когда (и если) вы лично начнете собирать статистику «популярность языков программирования среди оказателей услуги по написанию корпоративного софта», тогда да — нужно разделять. Вам лично я нужно я имею в виду ибо сильно подозреваю, что никому кроме вас такая статистика не пригодится (хотя, как знать — оно всяко бывает)


  1. third112
    03.10.2018 12:23

    Сравнение языков — тема, которая, видимо, никогда не потеряет актуальности, что доказывают регулярные холивары. Видимо, в таких сложных вопросах не может быть идеальных рейтингов. Взять, нпр., индексы цитируемости н-т. литературы. Предполагается, что высокий индекс показывает востребованность данного источника. С этим можно согласиться. Но из этого зачастую делается неверный вывод, что чем выше индекс — тем лучше источник. А это не всегда так — может быть ситуация, когда одиозную статью поминают только для того, чтобы пнуть. Парадокс Герострата — мало кто помнит, кто построил храм, но все помнят, кто его сжег. Поиск документации на ЯП может, нпр., означать не что на нем много пишут, а что с него много переводят ранее написанное. При всех очевидных минусах рейтингов их явно или неявно широко используют для продвижения и выбора продуктов, а от индексов цитируемости явно или неявно зависит ЗП и гранты научных сотрудников многих НИИ и универов. Даже ссылка в Википедии зачастую зависит от индекса-рейтинга.


  1. achekalin
    03.10.2018 12:49

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

    А зачем он это делает часто?


  1. unabl4
    03.10.2018 14:53

    Github, как мне кажется, географически (в смысле география юзеров) ОЧЕНЬ biased в сторону США.
    Иначе я никак не смогу объяснить 4-ое место Ruby. Сам на нём пишу (писал) и прекрасно знаю, что он почти везде, кроме США, уже давно почти никем не используется. Во всяком случае на 4-ое место ему точно никаким образом не подняться.
    Так же для валидации можно обратить свой взор на глобальный опросник от StackOverflow — insights.stackoverflow.com/survey/2018, раздел «Most Popular Technologies»


    1. Neikist
      03.10.2018 14:55

      Разве? По моему еще в японии используют нередко.


      1. unabl4
        03.10.2018 14:57

        Родину языка-то я и забыл. Да, тоже может быть. :)


        1. saag
          03.10.2018 15:56

          А также в Британии, и кажется в Канаде


  1. springimport
    03.10.2018 18:31

    По моему, если и составлять какой-то рейтинг, то нужно делить его по областям, а не мешать все в кучу.
    Так же надо брать не первый-второй-третий, а группа 1, группа 2 и так далее.

    Например. Думаю что всем очевидно что в вебе самые популярные это: js, php и sql (если его можно считать языком). Потом идет группа 2: питон, ruby, java. Но я не спец и могу ошибаться.
    Если взять разработку под windows, то наверное в первом эшелоне будет нечто вроде: c#, c/c++. Во второй группе, например, будет питон и java.


    1. foal
      03.10.2018 23:47

      Ага, а то все эти рейтинги выглядят как опрос «самая популярная медицинская профессия” и варианты ответа – медсестра и нейрохирург. Как вы думаете, какое будет соотношение….


  1. Nice-L
    03.10.2018 18:34

    Уважаемые гуру, а человеку, который только начинает учиться программированию, какой язык вы бы посоветовали в качестве самого перспективного?


    1. shiru8bit
      03.10.2018 18:45

      Мне кажется, новичку нужнее язык доступный и понятный, а не перспективный.


      1. dplsoft
        04.10.2018 00:03

        который надо не зыбыть сменить на что-то «не учебное» в конце обучения.
        ибо боевой истребитель — он не для тех кто только учится.
        для учебы — учебные самолетики, простые в управлении.


    1. areht
      04.10.2018 01:53

      В качестве перспективного где?

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

      изучите 3-5 языков в близких вам направлениях, потом сами поймете чего не хватает.


  1. dplsoft
    03.10.2018 23:57

    по поводу популярности, у меня был, однажды, разговор.
    человек «топил» за руби, но сути вопроса это не меняет:

    — 80% проектов на гитхабе сейчас начинают на _этом_языке_!
    — а ты посмотри, пожалуйста, сколько этих «проектов» не будут заброшены уже через 2-3 месяца?
    (молчит)

    вот я вся «суть популярности», имхо. шумиха, мода, раздувание собственной значимости — направленные на, по сути, обман тех, кто «не особо в теме».

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

    про последнее все забывают и ставят на одну планку сравнения «популярности» скажем руби и джаву, забывая, что рефакторинг большого кода в языках с динамической типизацией — совершенно другая лебединая песня, чем автоматическое отслеживание зависимостей и использования типов в языках со статической типизацией.

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

    но, увы, задаваться этими вопросами… как правило не задаются. мода направлена на поиск очередной серебрянной пули. и, кажется, что «популярные статистики» направлены не на выяснение правды, ибо она сложна и не понятна, а на расчесывание ЧСВ у хомячков и целевой аудитории. имхо. что и есть ответ на поставленный в заголовке вопрос. тоже имхо )


  1. kalininmr
    04.10.2018 03:25

    мне кажется должна быть качественная оценка ценности кода
    например:
    1) массовые либы
    2) не очень массовые либы
    3) массовый софт
    4) специализированный софт
    5) корпоративный софт

    легаси код пожалуй должен иметь отрицательный баланс — его пишут от безысходности на конкретном языке


  1. guai
    04.10.2018 05:53

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


    1. LynXzp
      04.10.2018 21:04

      Статья на хабре: Какие самые нелюбимые языки программирования? Спойлер: MS — корень зла.


  1. saipr
    04.10.2018 21:20
    +1

    Я думаю, что самые популярные ЯП — это…

    А где Tcl/Tk


    Согласно отчётам GitHub от 2016 и 2017 годов, наиболее популярный язык программирования в мире, причём с большим отрывом, это Javascript. На втором месте идёт Python, на третьем Java, а на четвёртом Ruby. Это резко контрастирует с TIOBE, где указываются Java и C, а потом, с большим отрывом, Python и C++ (Javascript вообще на восьмом месте). И с PYPL, заявляющим о таком порядке: Python и Java, большой отрыв, потом Javascript и PHP.

    Вообще-то мешать все в одну кучу я языки программирования и скриптовые языки — это, на взгляд, нонсенс.


    На втором месте идёт Python,

    А что творит Python3 с unicode-ом?
    И куда это делся Tcl?
    Странно все это!


  1. JosefDzeranov
    04.10.2018 21:56

    Всем привет. Создал курс по Основам программирования с видео лекциями. Советую всем пройти. stepik.org/course/5482/syllabus


    1. riot26
      05.10.2018 03:23

      Очень странно что карму не слили ещё за спамерский пост.