Что за ерунда происходит с рейтингами популярности языков программирования?

Original author: Jon Evans
  • Translation


Я сегодня изучал индекс 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. Из-за этого он выглядит гораздо убедительнее. Однако его выборка, основанная на открытом коде, делает его не определяющим.

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

Only registered users can participate in poll. Log in, please.

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

  • 71.2%Javascript2310
  • 51.9%Python1686
  • 58.8%Java1909
  • 4.2%Ruby137
  • 38.7%PHP1256
  • 36.0%C++1170
  • 30.2%C#980
  • 8.8%Go285
  • 17.2%C558
  • 5.4%Typescript177
  • 3.1%Shell101
  • 10.7%Swift346
  • 1.2%Scala39
  • 4.1%Objective-C133
  • 1.1%Perl35
  • 1.1%Visual Basic .NET36
  • 2.6%Delphi / Object Pascal86
  • 1.6%Assembly51
  • 0.8%R27
  • 3.1%Rust100
  • 1.4%Lua47
  • 1.2%Haskell39
  • 0.6%Julia19
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 282

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

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

        –2
        Если делать перепись, то не удивлюсь что на первое место выйдет PHP благодаря категории «пару раз перед сном дома CMS написал по мануалу». Относить ли такую категорию к программистам дело вторичное.
          0
          Я думаю PHP выйдет на второе место, если искать по вакансиям)
            +4
            Первая моя мысль после прочтения статьи была «че же не померить по вакансиям». Но, увы, это тоже ошибка выборки — на разных технологиях может быть разная текучка кадров. В суровом энтерпрайзе Джавы трудится куча народа, но из-за того, что это суровый энтерпрайз, количество открытых вакансий может не отражать количество реально трудоустроенных (и, как результат, пишуших) на Джаве.

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

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

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

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

                    +2

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

              +3
              Так надо чтобы человек не только указал языки, на которых он когда-то писал, но и в каком объёме, в каком году последний раз, и насколько активно/профессионально он занимается разработкой. Можно ещё указывать отрасль: web frontend, web backend, enterprise, open source, embedded, mobile и т.д. И конкретный фреймворк. Страну тоже было бы неплохо, т.к. рынок в разных странах может сильно различаться. Отдельно ещё можно указать, какие языки изучал в ВУЗе, и в каком году, чтобы знать насколько обучение релевантно рынку, и как ситуация меняется. Вот тогда статистика будет не только интересной, но и полезной. Сразу будет понятно на чём фокусироваться, если хочешь попасть в определённую отрасль. Частично такие корреляции и так очевидны и общеизвестны, вроде javascript/frontend или java/enterprise. Но всё же хочется больше подробностей. Например, какой процент C++ программистов используют, скажем Qt. Использует ли современный enterprise в значимых количествах, например, Python или Go. Какое количество Java программистов экспериментирует с Kotlin, и сколько перешло на него в реальных проектах. И т.д. В общем много всего интересного можно было бы увидеть.
                –1
                Чисто в рамках примера ответа по перечисленному перечню вопросов:
                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 (могу во «фрагменты», могу в «активити»).
                Работаю практически каждый день, локально/удаленно — без разницы.
                Учился на радиофизическом, в программирование пришел из поваров. РФ.

                Основное направление — разработка автоматов функционального тестирования.
                  0
                  какие языки изучал в ВУЗе, и в каком году, чтобы знать насколько обучение релевантно рынку

                  Обучение популярным языкам программирования — это не задача вуза, поэтому отразит лишь популярность некоторых языков среди преподавательского состава.
                    0
                    Есть неплохая выборка от StackOverflow:
                    0
                    Брр, напомнило как я загран паспорт менял…
                  +1
                  Не логичнее ли, тогда уж, считать по совокупному числу юзеров всех написанных на том или ином языке программных продуктов? Тоже, правда, непонятно, как считать, да и метрику нужно продумать более основательно — иначе каждый балл за Джаваскрипт, например, будет стабильно давать баллов по десять за C++ какой-нибудь (ну, там, на чём написан браузер, ОС, веб-сервер, серверная ОС, вот это вот всё). Зато отсеются все эти «пару раз перед сном CMS по мануалу».
                    0
                    Может лучше посмотреть, за что больше платят? Или на каком языке можно писать в течении нвиболее продолжительного промежутка времени, не переучиваясь (тут си победит с большим отрывом).
                    Бльше людей пишут код — в средней школе все писали на бейсике так-то, не показатель.
                      0
                      Пишут или произведено кода вообще когда-либо? Во втором случае — чем более старый язык, тем больше на нем кода и больше людей им пользовались (в среднем, при прочих равных). В первом — за какой период учитывается написание кода?
                    0
                    Думаю, что питон даже не топ 3. 4й или 5й должен быть.

                    P.S.
                    А еще, у меня нет ни одного знакомого, который бы умел в руби, ни то чтобы прям писал на нем.
                      0
                      (Про Python) По использованию в коммерческой разработке — вполне вероятно Вы правы. А вот как язык которым хоть как-то владеют — я думаю он сейчас будет одним из первых, так как очень многие современные программы обучения (Coursera, Udacity, Stepic и т.д) начинают именно с него.
                        0
                        Ну вот голосование, на текущий момент, показывает, что питон-то «о-го-го»… видимо, я (и еще два человека) неправильно думаю )
                          0
                          С моей точки зрения, сейчас любят начинать учить с JS.
                          Небольшой личный опыт: мой друг-медик скачал какое-то обучающее программированию приложение и там был именно JS как язык, на основе которого объясняют основы.
                          0
                          Популярность еще очень зависит от страны и даже города. Где-то Python рулит, где-то Java. А смотреть в среднем по больнице смысла нет.
                          Тут скорее важно количество вакансий в том регионе где ищешь работу.
                            0
                            В последнее время популярность языков программирования определяю очень просто — беру популярную площадку с вакансиями (для нас 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
                              +2
                              цифры на upwork будут значительно отличаться и php там топ1 с большим отрывом :)
                                +3
                                Возьмите выборку по Китаю, и там PHP разорвет все другие языки. Возьмите выборку по России, и тут как-то все более сбалансировано. Возьмите выборку по Индии — тоже удивитесь.
                                  0

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

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

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


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


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

                                    +10
                                    Стесняюсь спросить, а Пиндостан — это где? Можете на карте показать?
                                      –4
                                      Что там показывать-то? США это. Руби ещё более-менее как-то «жив» в США. Питон популярен везде более-менее равномерно.
                                        0
                                        Мне кажется, комментатор выше знает это. Намек был просто на принятый нейтральный стиль общения на Хабре.
                                          +2
                                          Зато «пиндостан» — отличное слово-индикатор. Такое же отличное, как, например, «хомячки».
                                          0

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

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

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

                                        +9
                                        Я не совсем программист. Объясните пожалуйста зачем состоявшимся разработчикам изучать колебания популярности тех или иных языков программирования? Какие выводы они сделают про изменениях? Перепишут весь код на другом языке?
                                          +15
                                          Могут принять решение перейти на другой язык, чтобы в будущем потенциально не остаться без работы или решить расширить круг потенциальных рабочих мест.
                                            –22
                                            перейти на другой язык
                                            Люди пишушие на одном языке — макаки, а не разработчики. Нормальный разработчик выбирает язык и тулсет под задачу
                                              +14
                                              В идеальном мире да. В неидеальном есть компании, а у компании продукты, и никто не будет тратить лишние деньги на поддержку новой инфраструктуры из-за того что язык А быстрее языка Б на 5% в конкретной задаче.
                                              Я вот как-то не встречал еще в своей жизни спецов, которые абсолютно одинаково (с точки зрения качества кода) могут писать на нескольких языках.
                                                –28
                                                никто не будет тратить лишние деньги на поддержку новой инфраструктуры из-за того что язык А быстрее языка Б на 5% в конкретной задаче.
                                                А если на 50% больше прибыли, то будет. В любом случае ваш пример к моему коменту отношения не имеет.

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

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

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

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

                                                  Бог ты мой, как только я осмелился на тему ИТ говорить со спецами на «тру» языках, все ухожу ухожу.
                                                    +12
                                                    Вы что ситх? Ведь только они все возводят в абсолют
                                                    Люди пишушие на одном языке — макаки, а не разработчики. Нормальный разработчик выбирает язык и тулсет под задачу
                                                    О, товарищ ситх, и каково вам в нашем неидеальном мире после далекой-далекой галактики?
                                                      –12
                                                      А в чем я не прав? Если человек находится на том профессиональном уровне, на котором изучение новых языков\технологий представляет для него проблему, то он обладает низкой квалификацией. Вы будете с этим спорить?

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

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

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

                                                        В лёт перейти с одного языка на другого в ущерб материальным ценностям, карьере и т.д. могут только студенты, у которых пока еще нет ответственности и обязанностей.
                                                          –6
                                                          Аргументы у вас очень странные. Нормальному специалисту нужно 2-3 дня, а не месяца чтобы разобраться в новом языке и уметь написать простейшие вещи. Остальное приходит с опытом по мере работы.
                                                            +3
                                                            Ммм… А для написания простейших вещей точно нужен специалист? Я в целом придерживаюсь мнения что завязываться на одной технологии неправильно и нормальный специалист должен быть способен на уровне мидла подходы, библиотеки, технологии и т.п. освоить новые за пару-тройку месяцев, но то что можно освоить за пару недель — разве что в простых вещах применить можно будет.
                                                              +4
                                                              Разве речь идет о простейших вещах? Не помню источник, но в одной статье говорилось, что программист работает на треть менее эффективно на новом языке программирования. Я и имел ввиду следующее, что для бизнеса задержка релиза на условный месяц чаще всего будет критичней, чем увеличение производительности на 5% или простоты поддержки на 10%.
                                                                +5

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

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

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

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

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

                                                                          Козьма Прутков
                                                                            –3
                                                                            Ты сказать-то что хотел?
                                                                      0
                                                                      Стандартный вопрос: сколько лет и на каких языках вы пишите?
                                                                        +2
                                                                        Хм… Ну ладно.
                                                                        ~30 лет.
                                                                        Языки в примерном порядке их изучения:
                                                                        8080 assembler
                                                                        Basic
                                                                        C
                                                                        8086 assembler
                                                                        Pascal
                                                                        C++
                                                                        Prolog
                                                                        ARM assembler
                                                                        Java
                                                                        Perl
                                                                        Ruby
                                                                        Python

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

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

                                                                            P.S. Субъективно: после Haskell и Rust — читать код с Boost слегка… неприятно, наверное. ИМХО Haskell вполне достаточно для представления о приличной системе типов.
                                                                              0
                                                                              Только она там неприличная. Хотя с чем сравнивать, конечно.
                                                                                +1
                                                                                Мы помним, что в некоторых языках вполне себе выполняется выражение 1+'1'-1, давая на выходе 10.

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

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

                                                                              Честно говоря все эти слова " Idris, Mercury и Rust. Или сразу ATS.", кроме Rust-а мне ничего не говорят, так что время тратить не хочется, но если там нету кардинальной смены парадигмы (типа как в функциональных языках), то всё еще не вижу почему их нельзя изучить, ну пусть не за 2-3 дня, но за неделю две, как меня тут поправляют.
                                                                                0
                                                                                Если и взлетит, то Fussy Prolog с нечёткой логикой.
                                                                                А классический Prolog ограничен в практическом применении из-за его строго бинарной логики.
                                                                                  0
                                                                                  Idris и ATS — языки с «зависимыми типами», концепцией, которую понять не просто.
                                                                                  В Mercury есть линейные типы, на которых сделан ввод/вывод (что позволило не тащить в логический язык много императивщены).
                                                                                  Меcто Prolog сейчас начинают заменять системы удовлетворения ограничений и SMT-солверы. Тоже, кстати, нетривиальная тема.
                                                                                    0
                                                                                    Концепция завтипов предельно проста, её правильно и идиоматично применять непросто.
                                                                                    0
                                                                                    Ну, в C++11, 14 и 17 буст нужен, например, для mpl/fusion/hana, или для всяких более прикладных вещей вроде boost.graph или там multiindex какой-нибудь.
                                                                                    0
                                                                                    Почему «сразу ATS»? Он же проще. Есть императивность, завтипы ограничены ЕМНИП.
                                                                                    0
                                                                                    Большой опыт! Перепишите конструкцию c Python на Ruby:
                                                                                    [x for x in range(3, n, 2)]
                                                                                    Или вот, на Lisp-е научитесь писать этот код за 3 дня?
                                                                                      +1
                                                                                      Научитесь генерировать этот список через рекурсивные схемы за 24 часа.
                                                                                        0
                                                                                        А чего тут сложного-то в Ruby?
                                                                                        Да, там нет list comprehension, но можно все тоже самое сделать стандартными функциями и/или лямбдами.
                                                                                        Конкретно для этого выражения эквивалент:
                                                                                        (3...n).step(2).to_a

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

                                                                                        Возможно есть какие-то современные IDE, которые делают эту кашу читаемой, могу ошибаться но насколько я в курсе для Lisp даже нормального бесплатного компилятора нет, не говоря про IDE. Поэтому в ту сторону даже смотреть не собираюсь. Опять-же на мой взгляд вся сложность программирования на Lisp — это «превозмогание» его синтаксиса, а не какие-то концептуальные вещи…
                                                                                          0
                                                                                          Вопросов нет! Вы точно за 2-3 дня сможете начать писать на новом языке.
                                                                                          0xd34df00d, благодарю, но я ещё не дорос.
                                                                                            0
                                                                                            GNU CLisp — не подойдёт на роль компилятора?
                                                                                              0
                                                                                              Подойдет конечно, был не в курсе, как я уже писал в сторону Lisp-а, я не особенно смотрел. Просто использовал относительно недавно программку написанную на Lisp-е в описании которой говорилось, что компилиться она только коммерческими компиляторами.
                                                                                                0
                                                                                                Это большая беда Лиспа. Язык старый, стандарты старые, новые далекты (коих масса) седржат кучу нестандартных расширений.
                                                                                    0
                                                                                    Бытует такое мнение, что для поддержания себя в форме разработчику хорошо бы учить по одному новому ЯП в год. Не в том смысле конечно, что все бросать и становиться гуру, а просто заложить базу. Скорее всего ему никогда не придется профессионально на них писать, но, если вдруг, то перестроиться будет в разы легче.
                                                                                    +2
                                                                                    А в чем я не прав? Если человек находится на том профессиональном уровне, на котором изучение новых языков\технологий представляет для него проблему

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

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

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

                                                                                          И да, забыл сказать, инженер который писал эту программу точно знает python, т.к. в проекте есть много python скриптов многие из которых писал он, но Java была выбрана (по моим ощущениям, может я ошибаюсь), из-за того что ресурсы используются в Java приложении (Android), и он возможно просто тупо не знал как из питона их записать в файл чтобы из Java потом прочитать.
                                                                                          0
                                                                                          А что со скоростью выполнения работы? С одной стороны java довольно любит ресурсы, с другой — питон интерпретируемый и без С вставок и/или какого PyPy работает он не особо быстро.
                                                                                          Думаю, на go получилось бы сопоставимо по объёму, но быстрее по скорости…
                                                                                            0
                                                                                            Ну не всегда, даже возможно чаще не, скорость работы (если она кончено меняется в разумных пределах, а то есть знаете ли примеры...) программ является решающим фактором.

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

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

                                                                                          А вот какой-нибудь питон я патологически не воспринимаю и писать на нём не могу и не буду.
                                                                                            0
                                                                                            Чистое любопытство — а в чем корень нелюбви к питону, что с ним, по-вашему, не так?
                                                                                              0
                                                                                              Ну вот я например предпочитаю Ruby чисто из-за синтаксиса, честно говоря идея сделать форматирование текста программы частью его синтаксиса кажется мне немного «странной».
                                                                                                +1

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


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

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

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

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

                                                                                                  JS/PHP откровенное говно. Но говно потому что делались левой пяткой на коленке, с кучей косяков by design.
                                                                                                    +1
                                                                                                    Удержаться было просто невозможно. Искренне прошу не принимать написанное на картинке на личный счет, это просто гэг.
                                                                                                    Заголовок спойлера
                                                                                                    image



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


                                                                                                    Статическая типизация хороша хотя бы тем, что позволяет выловить ошибки типов еще на этапе компиляции. Ну и да, даже говноскрипты можно писать на Haskell, мне вот недавно поведали сие тайное знание.
                                                                                                      0
                                                                                                      Ну и да, даже говноскрипты можно писать на Haskell, мне вот недавно поведали сие тайное знание.
                                                                                                      Можно и на Go, кстати. У Android билд-система с python на Go переезжает.
                                                                                                      0
                                                                                                      Ложка хороша хотябы тем, что когда ешь суп, жидкость не вытекает между зубчиками
                                                                                                      0
                                                                                                      Глупая картинка же. Это все равно что сравнивать яблоки груши.

                                                                                                      Антоним динамической типизации — статическая. А строгой — слабая. Python динамический, но строгий. JavaScript динамический и слабый. C — статический, но слабый. C# — в целом статический и сильный.
                                                                                                      0

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


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


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

                                                                                          +7

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


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


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

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

                                                                                            А что фреймворк в больших проектах меняют каждые полгода?!
                                                                                            И сеньор, который не меняет постоянно библиотеки и фреймворки на новомодные уже и не сеньор?!
                                                                                            Типа «пох на дедлайн! лучше время на миграцию на очередной фреймворк потратить, чем на доведение до релиза! заниматься исправлением багов — это для лохов!»?!
                                                                                              +1
                                                                                              Угу, я вот смотрю на свое место работы, где основной продукт — на Delphi, миллионы строк кода и ведет свою родословную из ЕМНИП 1983 года. И прямо вижу, как мы раз в квартал меняем фреймворки и платформы…
                                                                                              +1
                                                                                              И даже скажу больше — обычно люди пишут на нескольких языках «на одном языке».

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

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

                                                                                              Если говорить об основных библиотеках и фреймворках вроде web фрейворка, ORM, то практически нет разницы для какого он языка. Основные концепции одинаковые, ключевые слова одинаковые. Разница чисто косметическая.
                                                                                              Про всякую мелочевку — а зачем тут что-то изучать, открыли доку и веред. Все равно нужно будет ее адаптировать под проект.
                                                                                                +2
                                                                                                > И ты будешь хуже того, кто все это знает.
                                                                                                1) А долго ли, или первая неделя покроет 95% всех действительно важных для разработки знаний?
                                                                                                2) А какой процент фреймворка знают наизусть те кто на нем писали все эти пол года?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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


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


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


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


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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                                                                                                                          Попытка же совместить Prolog и, скажем, Java, в одном модуле — приведёт к таким пляскам с бубном, что мало не покажется…
                                                                                                                          В действительности если бы пролог оставлася узкоспециализированной, но хорошо интегрируемой и относительно простой вещью, я бы его использовал. (В современном мире у него была бы ниша как у ассемблера.) А так получается, что создатели пролога работая с детским конструктором решили что кубы лучше окружностей, а потом полезли с этим в автомобилестроение.
                                                                                                                      0
                                                                                                                      И он прав, если задачу проще и дешевле сделать на Haskell, надо делать на Haskell
                                                                                                                      .
                                                                                                                      А потом возникает необходимость программу доработать, а он уже ушел в другое место. А ближайший человек знающих хаскель запрашивает немалые деньги, и то его найти удалось через пол года только.
                                                                                                                      Не забывайте что мы в т.ч. решаем задачу бизнеса, а ему важно в т.ч. насколько просто найти специалиста, насколько быстро другой специалист может что то поправить, есть ли отличия в деплое, настройке и поддержке среды (или у вас этим тоже программист будет постоянно заниматься?).
                                                                                                                      Как программист лично я с вами согласен, но если смотреть здраво — такой подход принесет проблемы. Это уж не говоря о том что всегда есть тонкие нюансы в технологии, используемых библиотеках и подобном, на которые специалисты в этой технологии уже наступали и сразу могут обойти. И уж точно нужно помнить что какой бы кругозор ни был — время на вспоминание/обновление/изучение знаний по технологии нужно, а время это деньги и сроки.
                                                                                                                        0
                                                                                                                        если задачу проще и дешевле сделать на Haskell
                                                                                                                        Я с вами согласен. Слово дешевле и подразумевает интересы бизнеса в данном моменте
                                                                                                                        +1

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

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


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


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


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


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


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


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


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


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


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

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

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

                                                                                                                            Ух, мощно.


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


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


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


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

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

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

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

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

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

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

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

                                                                                                                                  +2
                                                                                                                                  И вообще язык — ерунда, сколько там занимает описание языка?
                                                                                                                                  Официальный стандарт C++17 — почти полторы тысячи страниц. И это очень сухое описание, без вводных глав и наглядных примеров.
                                                                                                                                    0
                                                                                                                                    Это исключение из правил. Рядовой язык вполне быстро осваивается. Да даже плюсы не то чтобы долго будет изучать. В любом случае, куда больше времени занимает освоение идиоматичного написания на этом языке, лучших практик, набор опыта. И тут плюсы вполне релевантны, т.к. освоиться с теми же умными указателями и правильно принимать решение, какой где использовать, это уже посложнее, чем просто научиться новенькие concepts сочинять. И это не говоря уже о конкретный фреймворках.
                                                                                                                                      0
                                                                                                                                      В любом случае, куда больше времени занимает освоение идиоматичного написания на этом языке, лучших практик, набор опыта.
                                                                                                                                      Дык в этом и дело! Если вы «изучите» какой-нибудь C++ и начнёте писать на нём так, как писали на Java — ни к чему хорошему это не приведёт. Вы получите хрень, которая объединит недостатки обоих языков, скорее всего.

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

                                                                                                                                      И если вы будете присать программу на Haskell так же, как вы бы писали её на C++ (а никак иначе человек без опыта не сможет её написать) по указанию «гениального» архитектора — то ничего, кроме проблем, вы не получите…
                                                                                                                                        0
                                                                                                                                        Похоже на generics из java.
                                                                                                                                        // На плюсах никогда не писал
                                                                                                                                          +1
                                                                                                                                          Синтаксически дженерики и шаблоны похожи. Но работают они совершенно по разному.
                                                                                                                                          public class Example {
                                                                                                                                            public static void DoIt<T>(T t) {
                                                                                                                                              ReallyDoIt(t);
                                                                                                                                            }
                                                                                                                                            private static void ReallyDoIt(string s) {
                                                                                                                                              System.Console.WriteLine("string");
                                                                                                                                            }
                                                                                                                                            private static void ReallyDoIt<T>(T t) {
                                                                                                                                              System.Console.WriteLine("everything else");
                                                                                                                                            }
                                                                                                                                          }

                                                                                                                                          Этот код в С# всегда будет выводить «everything else» при вызове DoIt(«text»). Его эквивалент для C++ выведет «string». А в Java вообще нет его прямого эквивалента, потому что специализация дженериков не предусмотрена. И это только одно отличие в одном аспекте одной концепции. А всего их всех многие сотни.
                                                                                                                                            0
                                                                                                                                            Визуально 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++ — это нормальный способ возврата нескольких значений из функции…
                                                                                                                                              0

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


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

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


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


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

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

                                                                                                                                                Вот совсем недавно мы в одном маааахоньком модуле упёрлись в то, что 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);
                                                                                                                                                }
                                                                                                                                                
                                                                                                                                                И да — это по мотивам реального кода из реального проекта…
                                                                                                                                                  0
                                                                                                                                                  Я не догадался. Но это ничего, потому что в С++ VLA нет. Просто ваш компилятор слишком permissive.
                                                                                                                                                    +1
                                                                                                                                                    Ну дык эта. В C++ их нет, а в коде они есть. Прелестно, не правда ли?

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

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

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

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

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

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

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

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


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

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

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

                                                                                                                                                                  Добавляете -Werror=vla для gcc и -Werror=vla-extension для clang (хотя он вроде и gcc'шный вариант прожёвывает) и радуетесь жизни.

                                                                                                                                                                    0
                                                                                                                                                                    Пасиба. Потому что в самом сообщении указывается на -Wc99-compat который выключает слишком много.
                                                                                                                                                0
                                                                                                                                                Вот как раз std::tuple не использует никакой хитрой магии, и сделать его в Java довольно просто, с поправкой на ссылочность типа, отсутствие сахара и на ограниченность числа параметров. Кстати, первые две беды в C# преодолели.

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

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

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

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

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

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


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

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

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

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

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

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

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

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

                                                                                                                                                    0

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

                                                                                                                                                0
                                                                                                                                                Лично для меня: IT's AWESOME!
                                                                                                                                                Другой рациональной причины быть не может. При выборе языка в работе и карьере популярность бестолковый параметр. Надо смотреть на поддерживаемость, коммьюнити, применимость к конкретной задаче, востребованность на рынке и т. д.
                                                                                                                                                Это, конечно, несколько связано с популярностью, но вышеперечисленные параметры проще получить из статистики, и более полезны.
                                                                                                                                                  0
                                                                                                                                                  Некоторые программные продукты поддерживают скриптовые расширения и автоматизацию. По популярности можно выбрать, какой язык внедрить (ну как один из критериев).
                                                                                                                                                  Ну и как развитие трендов, язык может косвенно свидетельствовать о росте какого-то направления (ну как например, Python в машинном обучении, анализе данных и т.п.).
                                                                                                                                                    0
                                                                                                                                                    Один из разрезов мониторинга какие еще языки в тренде, какой следующий язык учить/посмотреть.
                                                                                                                                                    0
                                                                                                                                                    Популярность языка определяется количеством рабочих мест. TIOBE измеряет неизвесно что.
                                                                                                                                                      0
                                                                                                                                                      Точно? Как по мне так популярность это то как много разработчиков пользуются + хотели бы пользоваться языком. Например 1с в России очень распространен но мало популярен. PHP вроде в такой же ситуации примерно.
                                                                                                                                                        +5
                                                                                                                                                        1с в России очень распространен но мало популярен

                                                                                                                                                        Малопопулярен он на хабре, а не в России. Я бы даже сказал «не моден».
                                                                                                                                                          0
                                                                                                                                                          По моему (мнению и опыту) многие им чисто ради денег занимаются, а по факту предпочли бы что нибудь другое (и бывает по фану и занимаются чем то другим в свободное время).
                                                                                                                                                            0
                                                                                                                                                            Ну вообще я знаю только один язык с платным рантаймом, на котором в том числе по фану прогают — это Mathematica. И ABAP, и Swift, и powershell — это работа ради денежки.
                                                                                                                                                              0
                                                                                                                                                              Ну так и мы не популярность ABAP и 1с смотрим, а популярность среди всех языков.
                                                                                                                                                                +1
                                                                                                                                                                Подозреваю, что в этой стране программистов 1С больше, чем программистов на Java, C++ и PHP вместе взятых. У конторы может ещё не быть даже сайта, но начиная с 10-20 сотрудников с вероятностью 90% 1С у неё уже есть, вместе с как минимум приходящим программистом этой 1С. Где-то с 50 человек уже вероятно in house, и не один.
                                                                                                                                                                Просто часто 1С-программист это не вьюноша пылкий со взором горящим, а солидный такой дядечка, который хорошо умеет в бухгалтерию и бухгалтерш и освоил простейший бейсик для автоматизации формочек.
                                                                                                                                                                  0
                                                                                                                                                                  Есть некие сомнения что этому дядечке хоть какие то ЯП и технологии интересны как таковые.
                                                                                                                                                                    0
                                                                                                                                                                    1C программист это скорее тётечка!
                                                                                                                                                                      0
                                                                                                                                                                      Не, если именно нормальный программист — то кто угодно, а если «программист» то как правило парень который катается с обновлениями в случае франча или же показывает какой он сильный программист таская компы. Нисколько не умаляя что такие люди нужны, и возможно как бы не больше чем обычные программисты, но все же именно оттуда, как мне кажется, мифы о «тыжпрограммистах» идут, коих хотелось бы поменьше. Хотя вопрос кого программистом называть сложный.
                                                                                                                                                                    • UFO just landed and posted this here
                                                                                                                                                                  +1
                                                                                                                                                                  Большинство людей программированием ради денег занимаются, а по факту предпочли бы что-нибудь другое.
                                                                                                                                                                    0
                                                                                                                                                                    Ммм… Как мне кажется большинство все же не только ради денег. Ну т.е. если бы не платили совсем — да, немногие бы занимались, а в целом например я заканчивал школу с целью поступить в медицинский или экономический, а программирование планировал изучить по фану и заниматься в свободное время (я тогда даже не предполагал что программистов столько нужно, из деревни оно выглядело так что работу программистом найти разве что в москве можно, и то нужно пара тысяч на всю Россию). Справедливости ради на тот момент у меня и компа то не было (2009), а знания программирования ограничивались qbasic.
                                                                                                                                                            +1
                                                                                                                                                            Мне кажется что не правильно вот так в лоб сравнивать языки программирования.
                                                                                                                                                            В каждой сфере может быть свой рейтинг.
                                                                                                                                                            Где-то нужно меньше программировать и много думать, а где-то бывает совсем наоборот.
                                                                                                                                                            И под каждую задачу нужно выбирать наиболее подходящий язык а не наиболее популярный, где популярность — это всего лишь один из критериев для выбора.
                                                                                                                                                              +2
                                                                                                                                                              Популярный язык — значит очень большая конкуренция, на нём уже пишут все, кому не лень. Зачем его учить, да ещё в роли догоняющего, вслед за всеми? Пока что история показывает, что специалисты по устаревшим языкам без работы не сидят, и труд какого-нибудь фортранщика хоть и не широко востребован, но вполне достаточно, и оценивается по достоинству. Ну а владеющие C с плюсами и без вообще без дела не сидят уже полвека. Толку им внезапно перепрыгивать на ужасающе популярную Яву или Питон?
                                                                                                                                                                +1
                                                                                                                                                                Возможно смотрят не начинает ли их любимый язык в топ выбиваться (хотя сами пишут на другом по работе), возможно отслеживают не идет ли текущая их технология к упадку.
                                                                                                                                                                  +1
                                                                                                                                                                  Ну вот Java один из самых популярных языков, на нем пишут все, кому не лень. Но при этом вакансий много, а разработчиков всё равно не хватает. Мне вот регулярно прилетают предложения о работе, хотя я и не ищу её.
                                                                                                                                                                    +3
                                                                                                                                                                    «Ну вот Delphi один из самых популярных языков, ещё 10 лет назад на нём хоть когда-нибудь писали все, кому не лень. Но при этом разработчиков много, а вакансий ноль»:)
                                                                                                                                                                      0
                                                                                                                                                                      10-15 лет назад Delphi действительно был популярным языком и учили его многие. И работали Delphi-разработчиками, и деньги зарабатывали.
                                                                                                                                                                      Исходный вопрос был, зачем учить популярный язык. Ответ очевиден: ради работы.

                                                                                                                                                                      P.S. Или это был такой тонкий намек, что Java всё? Ну когда-нибудь да, будет всё, а пока популярно и работу даёт.
                                                                                                                                                                        0
                                                                                                                                                                        Несмотря на то, что Java мне не нравится, я не поверю, что она когда-нибудь вымрет, как и C/C++. Все таки слишком много на них написано и каждый день что-нибудь новое пишется с опорой на уже написанное.
                                                                                                                                                                        +2
                                                                                                                                                                        Ну вот народ позабудет, тогда на Дельфи опять моду возродят. И будут ждать, пока народ забудет Яву.
                                                                                                                                                                      0
                                                                                                                                                                      Нанимают не за знание языка, а за опыт. Фортран можно выучить, но где набраться достаточного опыта использования этого языка на каких-нибудь мэйнфреймах,
                                                                                                                                                                        0
                                                                                                                                                                        --но где набраться достаточного опыта использования этого языка

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