Какие самые нелюбимые языки программирования?

https://stackoverflow.blog/2017/10/31/disliked-programming-languages/
  • Перевод
На Stack Overflow Jobs каждый может опубликовать собственную Developer Story, чтобы поделиться достижениями и поспособствовать карьерному росту. При публикации можно добавить к статье теги, соответствующие языкам и технологиям, с которыми вы бы хотели работать и с которыми бы не хотели:



Это даёт нам возможность изучить мнения сотен тысяч разработчиков. Есть много способов измерить популярность языка. Например, мы часто использовали для изучения трендов статистику визитов на Stack Overflow или просмотров вопросов. Но данные о тегах — уникальная возможность посмотреть, что людям не нравится, когда у них есть возможность сказать об этом в резюме.

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

Языки программирования


В качестве меры измерения посмотрим, как соотносится во всех резюме доля тегов Dislike по сравнению с тегами Like для каждого конкретного языка. То есть 50% означает, что тег не нравится в точности так же часто, как и нравится, в то время как 1% означает, на каждые 99 человек, кто поставил лайк, нашёлся один с отрицательной оценкой. (Для оценки средних значений мы применяли эмпирический метод Байеса, который я описывал в этой статье, а он рассчитывает доверительный интервал с уровнем доверия 95%).

Для начала посмотрим на список языков программирования (в отличие от платформ вроде Android или библиотек типа jQuery), у которых минимум 2000 упоминаний в Developer Stories.



В списке самых нелюбимых языков с большим отрывом лидируют Perl, Delphi и VBA. За ними следуют PHP, Objective-C, Coffeescript и Ruby. Наши разработчики были особенно рады видеть, что R — самый любимый язык программирования по соотношению лайков и дислайков.

Если вы читали какие-то из наших статей по росту и падению популярности конкретных языков, то могли обратить внимание, что наименьшее количество дислайков обычно сопутствует языкам, чья популярность быстро растёт, таким как R, Python, Typescript, Go и Rust (мы отдельно исследовали Python и R) и все они относятся к числу языков с наиболее единодушными оценками. Точно так же многие из языков с большой долей дислайков — Perl, Objective-C и Ruby — одновременно ранее были замечены среди языков, у которых количество тегов на сайте быстрее всего снижается.

Это можно проверить, сравнив размер и рост для каждого языка с процентом тех, кто ставит ему дислайк. На теплокарте оранжевый цвет соответствует языкам с наибольшим количеством дислайков. Чтобы наш анализ был совместим с последними несколькими статьями, ограничим статистику только странами с высоким доходом (такие как США, Великобритания, Германия и Канада), где популярность языков немного отличается от стран с низким доходом.



Обычно есть взаимосвязь между ростом популярности тега и долей дислайков для него. Почти все языки, если они не нравятся более чем 3% пользователям, одновременно демонстрируют снижение по трафику Stack Overflow (кроме сильно противоречивого VBA, который стабилен или слегка растёт). А все языки с самой большой долей положительных тегов — R, Rust, Typescript и Kotlin — одновременно принадлежат к числу самых быстрорастущих тегов (Typescript и Kotlin растут так быстро, что не поместились на диаграмму).

Из общей тенденции выбивается функциональный язык Clojure; почти никто не выражает к нему неприятие, но он находится среди наиболее быстро падающих по трафику (падение по количеству визитов на сайте с вопросами началось примерно в последний год). Ещё одно исключение — MATLAB, популярность которого тоже снижается, хотя никто не ставит ему дислайки. Это может указывать на ограничение данных для измерения настроений: хотя у любого веб-разработчика может быть мнение о PHP, C# или Ruby, но у людей вне сферы анализа данных нет причины выражать мнение насчёт MATLAB. (Вероятно, это тоже может быть причиной, почему R так редко получает дислайки).

Мы не обязательно предполагаем наличие причинно-следственной связи, когда нелюбовь части программистов к некоторым языкам ведёт к снижению популярности этих языков. Есть и другая вероятность: людям комфортнее ставить дислайк и проявлять нежелание работать с языком, которая уже теряет популярность. Возможно, проявляют такое нежелание люди, которые раньше писали на этом языке, но больше не хотят. То есть происходит естественный процесс, когда «заменённые» технологии попадают в поле Dislike в резюме.

Самые любимые и нелюбимые теги


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



Среди лидеров несколько технологий Microsoft, в частности, Internet Explorer и Visual Basic, а также общий тег “Microsoft” (“Apple” тоже попала в список, хотя её не так катастрофически ненавидят). У нас хорошие новости для большинства из тех, кто проявил неприятие работе с Flash. Более старые языки, такие как COBOL, Fortran и Pascal, тоже попали в список.

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

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



Git может стать головной болью для многих разработчиков (как определённо он является для меня!), но люди редко признают это в своих резюме, и это один из самых однозначно лайкнутых тегов в наших Developer Stories. В список попал R, но здесь это не единственный тег из сферы data science. Машинное обучение получило одобрение 23 тыс. человек и очень редко попадало в категорию неодобряемых технологий. Теги вроде Python-3.X, CSS3 и HTML5 могут указывать на то, что разработчики редко указывают свою нелюбовь к конкретной версии технологии (даже если указывают). И конечно, jQuery популярен как всегда на Stack Overflow.

Сеть с полярными тегами


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



Если наложить теги на области экосистемы, то эта сеть показывает, какие типы тегов склонны к противоречиям. Есть кластеры таких тегов, связанных с Microsoft (с ядрами вокруг C# и .NET), PHP (вместе с WordPress и Drupal) и мобильной разработкой (в частности, Objective-C). Внизу кластера операционных систем (справа внизу) можно увидеть, что у систем вроде OS X, а особенно Windows есть недоброжелатели, а у Linux, Ubuntu и Unix нет.

Конкуренты


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

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



Так выявляются некоторые «конкуренты в софтверной экосистеме: Linux и OS X против Windows, Git против SVN, vim против emacs и (к моему удивлению) R против SAS. По большей мере эти пары представляют собой не «противоположные» технологии, а разные подходы к решению одних и тех же проблем. Многие из них указывают на переход от популярной в прошлом технологии к более современной (Git заменяет SVN, JSON заменяет XML, C# заменяет VB). Это имеет смысл в том смысле, как люди составляют резюме; для разработчиков типично указывать, что они не хотят работать с чем-то, что считают устаревшим.

Вывод


Мне не интересно участвовать в каких то «войнах языков программирования» и я не сужу пользователей, которые указывают, с какими технологиями не желают работать. Большая поляризация мнений о технологиях Microsoft часто подталкивает меня поделиться личным опытом. Я всю жизнь работал на Mac и UNIX и почти весь опыт программирования в университете и аспирантуре был на Python и R. Несмотря на это, я с удовольствием присоединился к компании со стеком .NET, и рад, что сделал это — потому что мне нравились и коллеги, и продукт, и данные. Не могу сказать за других, но лично я рад, что определился в том, какую работу мне интересно делать, а не в том, чего хотел бы избежать.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 280
  • +1
    Тоже не хочу разводить холивары, но чем людям так Ruby не нравится? Может кто-нибудь пояснить?
    • +20
      Я думаю тут уместна цитат: «Существует два типа языков программирования: те которые все обсирают, и те на которых никто не пишет».
      • 0
        выше вон появился пост с позитивными трендами
        • –3
          Вторые (с некоторым преувеличением) — это вероятно какие-нибудь Erlang или Clojure? В целом вещи часто очень хорошие, но для 99% задач этого мало — нужны типовые toolkit'ы, нужна среда разработки, средства сборки и ещё много чего. Такие, как я их называю, экспериментальные языки программирования, чаще всего хотя б по одному из таких пунктов очень слабы.

          И немножко поподражаю root'овому сообщению ветки — а чем людям так Objective-C не нравится — по мне один из лучших языков программирования, особенно по мне он очень хорошо сохранился с такой ношей обратной совместимости.
          • +1
            какие-нибудь Erlang

            Какие-нибудь WhatsApp, RabbitMQ, ejabberd, flussonic и чертова куча софта для телекома, в том числе — мобильного.
            Эрланг язык малозаметный, не то, что JavaScript (господи помилуй!).
            Но говорить, что на нем «никто не пишет» — большая ошибка. И еще большая ошибка — называть его «экспериментальным», учитывая его историю.
        • +4

          Может быть разработчики PHP и Ruby дизлайкают друг-друга?)


          Почитать бы эти developer stories, но они, видимо, видны только автору или работодателям.

          • 0
            На сколько я знаю часть из них точно в открытом доступе. По крайней мере я свою историю делал общедоступной.
          • –2

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

            • +1

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


              Мог бы предположить, что дизлайкают за отсутствие статической типизации и проверки типов, но по результатам всем нравятся JS и Python. И bash :) Сейчас только обратил внимание.


              Вообще, в предыдущих исследованиях SO вроде показали, что большая часть (с отрывом) аудитории — разработчики JS и SQL :) Так что столько дизлайков в сторону бэкенд языков, ничего могут и не значить кроме того, что они просто кому-то не нравятся в интернете.

              • 0
                Может за метапрограммирование и не любят, ведь оно сильно уменьшает предсказуемость поведения просматриваемого в данный момент кода.
                • 0

                  Если плохо пользоваться шаблонами с++, можно столкнуться с бОльшими трудностями. Метапрограммирование в том или ином виде есть в большинстве языков с меньшим количеством негативных оценок. В руби, благодаря модели наследования, можно получить гораздо более предсказуемое и отлаживаемое поведение. А из-за гибкого синтаксиса, самые разные DSL можно реализовать без библиотек, только с использованием языка.

                  • 0
                    имо некорректно сравнивать метапрограммирование на статически типизированном компилируемом яп и динамически типизируемом интерпретируемом.
                    • 0

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

              • –1
                Сейчас это хочется сказать про C#. Конечно, в плане лямбд и LINQ он не 100%-й первопроходец, но значительной степенью с него началось их массовое использование, а ещё и как задел на будущее для абстракций рекурсий. 6 лет назад анонсировали async/await — тогда казалось круто, а нынче относительно ReactiveCocoa, — какой убожество. А позднейшие spoonful of syntactics sugar не сильно могут «подсластить» сие отставание.
                • +1
                  Открыл первую попавшуюся статью, а там:
                  Для .NET разработчиков все это может показаться очень знакомым. ReactiveCocoa, на самом деле, Objective-C версия Reactive Extensions (Rx) для .NET.

                  Так вот, на шарпе вся эта реактивщина лет 8 точно. Отставание? Не, не слышал…
              • 0
                Медленный интерпретатор возможно.
                А вообще, раньше на сайте было написано «вы больше не захоите писать на других языках» или что-то такое
                • +1
                  Рискну опять нахватать минусов, но поделюсь своим опытом:

                  Последний ruby-разработчик, который нанимал меня на проект (я front-end разраб), сказал: «мы клиентский javascript пишем на coffee или на ES5, не хочу усложнять и добавлять в стек babel — он тормозит». Я подумал-подумал, и отказался.

                  Ну это так, частный случай. А вот общее наблюдение, которое случалось не один раз: проблема руби в том, что в руби всё идеально и «по линейке»! Но только до тех пор, пока ты в уютных рамках рельс. А «внешний мир» — он совсем не такой безоблачный, и мне, со своей колокольни, бывало очень сложно донести это руби-команде. Взять тот же snake_case, который чужд и в js, и в разметке, и в стилях. В ангуляре очень «здорово» такие поля_объектов иметь. И пробуй объясни, что это jbuilder должен отдавать вражеский camelCase. С названиями файлов та же ситуация.

                  Или вот, отсутствие фигурных скобок и табы — крутая идея. Только она не всегда хорошо работает. В sass есть проблемы с разбиением длинных строк. И порой, под возмущенные возгласы, приходилось коммитить старый добрый scss (точнее, новый добрый — потому что во всём остальном мире, кроме руби-сообщества, именно scss — стандарт!).

                  Кроме того, веб стремительно меняется — в ходу clientside MV* (angular, vue, polymer, etc), что конфликтует с изначальной идеей рельсового server-side MVC, и делает некоторую часть rails-boilerplate всё менее полезной. Например, хелпер-функции для пагинации, humanize, i18n — какой от них толк в динамическом ангуляре? Представьте, если они уже написаны и используются — у вас уйдет немало сил, чтобы убедить backend-команду, что это всё теперь нужно выбросить.

                  Но, надо отдать должное, руби (рельсы) — очень крутая экосистема. Сижу сейчас на Sequelize ORM (на node.js) и с большой тоской вспоминаю activerecord — тут рельсы вне конкуренции.
                  • 0

                    Правильные бэкенд разработчики будут рады выбросить humanize, i18n и что-бы фронтендеры сами с локализацией развлекались.


                    Про sass-scss тоже обобщение. Во всех проектах, где учавствовал, только scss использовали, про sass даже не обсуждали.


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

                    • 0
                      Ну, как сказать. Мне кажется, snake_case, как и блоки без фигурных скобок (.rb, .yaml .haml, .sass) — у руби в крови. И именно потому, что это там настолько хорошо и естественно работает — любая попытка нарушить правила воспринимается как вредительство.
                      • +2

                        Sass, yaml, haml и coffee вдохновлены python'ом. В спецификации yaml так и сказано: YAML's indentation based block scoping is similar to Python's .... А то, что они реализованы впервые были на руби, говорит о другом.

                    • +1
                      Я не веб-разработчик и использую в основном чистый ruby для шелл-скриптинга и chef/puppet. И знаете, нравится гораздо больше чем все остальное, чем python или bash. Гораздо удобнее, писать легко и лаконично что ли. Единственное что в нем не очень — скорость. Парсер данных, например для json-файла размером в гигов 20, на нем написать конечно легко и просто, но работает он раза в два (субъективно) медленнее чем тоже самое на Perl. Правда на Perl писать немного сложнее. Зато всякие cli утилиты на Ruby пишутся просто влёт, спасибо Rake, Thor и иже с ними.
                      • 0
                        Не пробовали Ruby-скрипты компилировать Crystal-lang'ом?
                        • 0
                          Пробовал. С нахрапу не получилось. Все-таки Crystal не 100% ruby-совместимый, а только лишь inspired by.
                      • 0
                        И пробуй объясни, что это jbuilder должен отдавать вражеский camelCase.
                        А кто мешает на фронте превращать при получении ответа все snake_case в camelCase, а при отправке запроса — camelCase в snake_case? Браузер, андроид, айос, виндовс фон, какие-то внешние системы — и каждый будет еще указывать беку, какой стайл-гайд для названий ему использовать.
                        • 0
                          Никто не мешает, просто jbuilder endpoint — он один и всегда в определенном месте, а entrypoint'ов в ангуляре — много (и они могут быть где угодно). Как-то из соображений естественности хочется, что водораздел был минимальной длинны, т.е. проходил по jbuilder'у.

                          Наличие того же ангуляра в стеке подразумевает, что куча кода написана именно на js-фронте. Почему бы API не быть в таком случае ангуляр-френдли.
                          • 0
                            Это типа шутка такая? В ангуляре есть интерcепторы, через них подобные штуки и делаются: обработка параметров перед отправкой запроса и после получения, обновление индикатора загрузки и тд. В итоге всего в двух местах нужно код написать. А в том же jbuilder, раз уж его упомянули — нужно в каждом описывать поля. Или, если с импортом jbuilder'ов друг в друга — то в одном на каждую сущность :)
                            • 0
                              Я интерсепторы не использовал (за намётку — спасибо), яжjsпрограммист — просто врапнул методы сервиса $http в свои.
                              Но как быть с полями форм? Ванильный сабмит ведь пойдет мимо интерсептора. Или нет?

                              Я в своём первом комментарии как раз об этом и говорил:

                              Другие стеки:
                              — Парни, нужен camelCase в json.
                              — Сильно нужен?
                              — Очень.
                              — Ок.

                              Rails:
                              — Парни, нужен camelCase в json.
                              — Это типа шутка такая?
                              • 0
                                Про шутку я писал в ответ на "а entrypoint'ов в ангуляре — много", а не на "нужен camelCase в json". Это почти самое первое, до чего доходит любой программист — повторяющийся код вынести и вызывать его по мере надобности, а не повторять его, как индус, которому платят за количество строк.

                                В остальном — как я уже писал, считаю, что бекенд должен диктовать правила. Просто потому, что он один, а разных клиентов под него — много. Но это истина лишь в первом приближении. В каждом конкретном случае могут быть особые требования или обстоятельства, из-за чего нужно будет делать по-другому.
                      • +1
                        Лично я заочно не люблю Ruby (когда в глаза его не видел и не писал на нём) за что он отбирает фокус внимания разработчиков от моего любимого Python и способствует размыванию усилий сообщества, что опять же лично я считаю одним из главных зол в IT индустрии. Один язык, одна платформа, одна нация, один фюрер.
                        • +3

                          Такими я представляю себе значимую часть их developer stories :)

                        • +2
                          Типизация и огромное количество магии.
                          Например, повсеместно используется изменение класса (не объекта) в рантайме, добавление и изменение методов.
                          По тем же причинам, просто менее выраженным, многие не любят питон.

                          Замечу, что это одновременно и плюс и минус, всё зависит от проекта.
                          Если мне надо что-то «на коленке» сделать, то я возьму руби. Но для проекта побольше обязательно выберу другой язык со статической типизацией.
                          • 0

                            Показатели js, python и bash противоречат этому. Непонятно только, под магией что имеется в виду. Если магия рельс, то это не должно относится к языку. А так, огонь и затмения тоже когда-то считались магией.

                            • +1
                              Я бы назвал магией всё, что меняет базовую семантику языка или ожидаемое поведение стандартных классов. Например перекрытие арифметических операций, всякие __getattr__/__setattr__ в Питоне, метаклассы, манкипатчинг и т.п.

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

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

                              В итоге мы имеем весьма сходные языки, но сильно отличающиеся сообщества. Мне кажется Питонисты не одобряют культуру сообщества Руби а не язык как таковой.
                              • 0

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


                                a = Money.new(1, 'usd')
                                b = Money.new(2, 'usd')
                                
                                a + b
                                # не хуже, а может и лучше, чем
                                a.add(b)
                                
                                # и, по мне, в разы лучше чем
                                import add from money.math
                                add(a, b)

                                не боги горшки обжигают, я тоже магию могу. В сообществе ценятся элегантные компактные решения и хитрые хаки

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


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


                                PPS. Я изначально обратил внимание только на то, что другие языки с указанными особенностями получили меньше негатива. Т.е. это негатив — не от этих особенностей. Немного подробнее написал в другом комментарии: https://habrahabr.ru/post/341516/#comment_10503278

                                • 0
                                  Да, в вашем примере это хорошая перегрузка, от которой код становится более читабельным и понятным. Более спорна перегрузка >> и << для складывания чего-нибудь в контейнер или очередь. А вот перегрузить + для добавления узла (или поддерева) в дерево — это уже весьма спорно, так как операция некоммутативна, а обычно + должен быть коммутативен (хотя конечно есть + для некоммутативной конкатенации строк, но к нему все уже более-менее привыкли).

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

                                  С вашим другим комментарием я в основном согласен, кроме пожалуй частей про преимущества Руби перед другими языками. По-моему в плане самого языка Питон и Руби мало отличаются и если выбирать язык для проекта скорее имело бы смысл смотреть на доступные библиотеки и опыт команды. А если анализировать негатив и его причины — я думаю тут дело вообще не в языке, а в том как программисты из этих сообществ воспринимают друг друга. Это скорее социологический вопрос чем программистский.
                                  • 0
                                    Вот тут коллеги как раз подкинули пример забавной Руби-магии. Импортируем модуль из стандартной библиотеки и математика во всём интерпретаторе начинает работать иначе.
                                    • 0

                                      https://github.com/ruby/mathn:


                                      Deprecated library that extends math operations.

                                      Вот пример из доки, тут лучше особенность показана:


                                      # Without mathn:
                                      #
                                      #   20 / 9 * 3 * 14 / 7 * 3 / 2 # => 18
                                      #
                                      # With mathn:
                                      #
                                      #   20 / 9 * 3 * 14 / 7 * 3 / 2 # => 20

                                      Библиотека для специфичной аудитории, видимо. Для тех, кому нужно решать математические задачи, не задумываясь о том, что у программистов есть какие-то там integer (3/2 = 1).

                                      • +1
                                        Понятно что библиотека маргинальная, и что все поняли что это была плохая идея (надо было ввести новый тип с другим поведением вместо того чтобы менять поведение обычных чисел). Тем не менее, сам факт что такой модуль смог попасть в стандартную библиотеку говорит о том, что в какой-то момент многие считали что это ок. И уже не так важно что больше они так не считают, историю растащили по Твиттерам и теперь куча людей думает что почти все программисты на Руби невменяемы.
                                        • 0
                                          $ man irb
                                          ...
                                               -m             Bc mode (load mathn, fraction or matrix are available)
                                          
                                          # С других источников:
                                          Sets bc mode [...]
                                          See Command line options at IRB and the unix manpage bc(1) for more information.
                                          
                                          $ man bc
                                          bc - An arbitrary precision calculator language

                                          Т.е. это модуль, который делает bc из руби. 100 строчек чтобы эмулировать в руби другой язык.


                                          Почему он в stdlib? Мне кажется, он очень похож "private" модуль для такого режима, который никто не должен реквайрить в обычных приложениях. Но если очень хочется, то можно, как и private метод вызвать, только вся ответственность уже на разработчике, который это использует.

                                          • 0
                                            О, то есть получается этот модуль вообще никому никогда не предлагали импортировать в нормальные приложения, и чуваки в твиттере либо не в теме либо специально FUD распускают. Вот так и возникают легенды про «другие языки, где всё ужасно».

                                            Не исключено, что моя выборка Руби-проектов и Руби-программистов была нерепрезентативна, и моё убеждение про то, что в сообществе Руби больше одобряют магию и хитрые хаки, а в сообществе Питона больше заботятся о читаемости текста, не соответствует действительности. А вам, на основании вашего опыта, как кажется?
                                            • 0
                                              О, то есть получается...

                                              ¯\_(ツ)_/¯


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


                                              • не имели базовых знаний computer science,
                                              • пытались применять подходы из других языков,
                                              • просто не изучили или не поняли язык и инструменты.

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


                                              в сообществе Питона больше заботятся о читаемости текста

                                              Недавно делал несколько моделей для TensorFlow, в некоторых официальных примерах организация кода не очень удачно выполнена.


                                              Касательно Python, по-моему, большое колличество особенных методов вида __len__ — это более магически. Даже их вид настораживает. При этом их необходимо использовать, чтобы пользоваться основными конструкциями языка. Мне особенно не нравится with с __enter__ и __exit__. Были бы многострочные лямбды, было бы лучше, наврное:


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

                                              Дисклэймер! Я не гуру питона, может все не так надо делать :)


                                              class Pool:
                                                def __enter__(self):
                                                  # Нельзя передать аргументы :(
                                                  connection = self.checkout()
                                                  return connection
                                              
                                                def __exit__(self, тут, какие-то, аргументы, еще, надо, знать):
                                                  if need_to_check_always:
                                                    self.checkin(one_of_args)
                                                  # return? неееет
                                              
                                              value = None
                                              with pool as connection:
                                                prepare_something
                                                value = connection.get('some')

                                              vs


                                              class Pool
                                                def with(timeout)
                                                  connection = checkout(timeout: timeout)
                                                  begin
                                                    yield connection
                                                  ensure
                                                    checkin(connection)
                                                  end
                                                end
                                              end
                                              
                                              value = pool.with do |connection| 
                                                prepare_something
                                                connection.get('some') 
                                              end

                                              А такое в питоне я знаю как сделать только, определяя локальную функцию, чтобы ее просто обернуть в лямбду:


                                              class Logger
                                                def with_level(new_level)
                                                  old_level = level
                                                  self.level = new_level
                                                  yield
                                                ensure
                                                  self.level = old_level
                                                  flush
                                                end
                                              end
                                              
                                              logger.with_level(:debug) do
                                                something
                                                more
                                              end
                                              
                                              logger.with_level(:error) do
                                                again
                                                and_again
                                              end

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

                                              • 0
                                                Не очень понял какой будет ответ на мой вопрос из предыдущего комментария, посчитаю что вам не кажется что вменяемые программисты на Руби, которые хорошо знают язык лучше относятся к магии чем их Питон-эквиваленты. Это хорошо, проапдейчусь в сторону меньшей разницы в одобрении магии между сообществами.
                                                Касательно Python, по-моему, большое колличество особенных методов вида __len__ — это более магически. Даже их вид настораживает. При этом их необходимо использовать, чтобы пользоваться основными конструкциями языка.

                                                Методы типа __len__ — почти все магия (кроме разве что __init__). Лучше их не трогать если нет на то серьёзных причин. Конкретно __len__ нужен если реализуешь что-то типа коллекции и не можешь понаследоваться от чего-то, у чего уже есть __len__. Мне кажется что специальный вид магических методов оправдан — сразу всем видно что это не простые методы.
                                                Мне особенно не нравится with с __enter__ и __exit__.

                                                Ваш пример с пулингом соединений — в общем-то нормальный юзкейс для __enter__/__exit__, но реализация в вашем примере слегка против шерсти Питона. Пожалуй самый удобный способ это сделать пожалуй через декоратор contextlib.contextmanager (в этом случае мы сами магии не делаем а используем заготовки из стандартной библиотеки):
                                                import contextlib
                                                
                                                class Pool:
                                                    @contextlib.contextmanager
                                                    def get_connection(self, timeout):
                                                        connection = self._check_out(timeout)
                                                        try:
                                                            yield connection
                                                        finally:
                                                            self._check_in(connection)
                                                
                                                with pool.get_connection(42) as connection:
                                                    connection.get('some')
                                                

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

                                                Да, этого не хватает, было бы здорово.
                                                • 0

                                                  Логгер — абстрактный пример, пусть будет 1 инстанс на тред :) С contextmanager все ок получается.


                                                  contextmanager пробовал, забыл про него. Для меня это еще 1 минус языка — чтобы не добавлять многострочные лямбды, добавили сомнительную конструкцию языка и к ней костыль. Во мне негодует Оккам. Возвращать значения из with все равно нельзя вроде, поэтому мне этот способ не подошел в реальной ситуации.


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

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


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


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

                                                  • 0
                                                    contextmanager пробовал, забыл про него. Для меня это еще 1 минус языка — чтобы не добавлять многострочные лямбды, добавили сомнительную конструкцию языка и к ней костыль. Во мне негодует Оккам. Возвращать значения из with все равно нельзя вроде, поэтому мне этот способ не подошел в реальной ситуации.

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

                                                    Кстати, если негодует Оккам, надо пописать на Лиспе и обычно отпускает (не всегда правда отпускает, но это тоже ок :).
                                                  • 0

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

                                                    • +1
                                                      Для того чтобы посмотреть код модуля/метода, список методов объекта и, какие из какого модуля добавлены, не нужно никаких IDE — есть библиотека pry, написанная на руби. Похожего для других языков я не встречал.

                                                      В большинстве ООП языков добавление методов в чужие классы считается хаком и не поощряется (а иногда и вообще невозможно). Потому что инкапсуляция от этого ломается. Если в Руби это обычная практика, то это довольно сильное отличие от ООП мэйнстрима.
                                                      • 0

                                                        https://ruby-doc.org/core/Enumerable.html для примера. Если класс предоставляет метод each, то include Enumerable добавит filter, find, inject/reduce, .... Это не кто-то посторонний делает, а автор класса: метод include — private.


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

                                                        • 0
                                                          А, ну это mixin, это более мэйнстрим, хотя джависты наверно тоже не одобряют :)
                                                          • –1

                                                            Миксин миксину рознь. Там, где миксин внедряется в класс явно внутри этого класса, то нормально смотрится и поддерживается. А если в какой-то бустрап или, ещё хуже, бизнес-логике, да не локально, то жить с этим очень сложно.

                                                            • 0
                                                              Согласен. Я говорил про миксины, от которых класс просто наследуется. А прикручивание стороннего миксина на ходу из другого модуля по-моему не очень сильно отличается от манки-питчинга — мне не сильно легче от того что пять сторонних методов, которые неизвестно откуда оказались в моём классе, оказывается все пришли из одного класса.

                                                              С другой стороны, в некоторых языках вброс методов, или конструкции, на него похожие, выглядит довольно естественно. Например реализация трэйтов для чужих структур данных в Расте имеет что-то общее с вставкой методов в чужой класс. Но разработчики Раста защитились от хаоса: во-первых там нельзя реализовывать чужие трэйты для чужих типов (можно только реализовывать свой трэйт для чужого типа или чужой трэйт для своего типа), так как это редко нужно и приводит к проблемам, а во-вторых строгий компилятор со строгой системой типов сильно сужает возможности прострелить себе ногу. Ну и конечно Раст вообще не особо ООП язык и трэйты больше похожи на тайп-классы из Хаскеля.
                                • –2
                                  Что это за приложения, которые необходимо написать быстро, причем выбирать для этого руби? Лично я на коленке леплю скрипты на PHP, если мне нужно, например, быстро скачать все видосы из плейлиста на ютубе, передать показания счетчиков в мою УК (да и вообще что-либо передать куда-либо) и так далее. А что еще может быть написано на коленке, плюс на руби? Может быть редактор БД, так, одноразовый, под конкретную задачу :D
                                  • 0
                                    Жаль, что ответа я не получу, а ведь я без всякого подвоха спрашивал…
                                    • 0

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

                                      • 0
                                        Вот это другое дело, а-то как минусы, дак пожалуйста, а ответа не дождаться (хоть какого, даже не обязательно дельного). Уже даже привык к такому поведению аудитории на Хабре, но все-равно как-то вымораживает. Напоминает как в школе если кто-то что-то спрашивает у учителя что ему не понятно, дак по всему классу начинается сдавленный смех, как-будто бы человек… не знаю, снял штаны перед всеми. Вот и собралась аудитория, эдакий виварий с комплексами из детства, которые пытаются отыграться за все во взрослой жизни. Говорю, потому-что кто-то должен это говорить.

                                        А что означает «на PHP перепишу, если одобрят»?) По мне дак PHP идеально подходит и для «хоп-хоп и в продакшн», и для сложных проектов полного цикла. У себя на работе пишу сложный проект с агиле и тестами, а дома в качестве свистелок коленочные скрипты для всего и вся. Что-то на курле написать, на крон подвесить и пусть стартует и что-то делает раз в час, красота же. Сам уже даже не помню сколько у меня на серваке таких скриптов крутится, что-то парсят, присылают на почту результаты. Да, возможно курла довольно многословна, не буду отрицать, ибо полностью гибкая, но можно же для нее обвертку небольшую написать, а не хочется если тащить ее за собой и иметь полностью автономные скрипты — можно копировать ее откуда-нибудь каждый раз. И самое главное — что он некомпилируемый, написал-запустил. Не знаю насчет рельсов. А в компилируемых подрпавил строку и сиди жди компиляции, понятно что на это может полминуты-минута уходит, но все-равно такие простои вынужденные снижают продуктивность.
                                        • 0
                                          Уже даже привык к такому поведению аудитории на Хабре, но все-равно как-то вымораживает

                                          Что это за приложения, которые необходимо написать быстро, причем выбирать для этого руби? Лично я на коленке леплю скрипты на PHP

                                          А что вам на это отвечать? Выглядит как субъективное мнение без обоснований, за это минус. Кто-то точно так же напишет, что он на ноде эти задачи сделает, и не возьмет пхп. Пусть пишет, но это не к чему знать всем остальным.


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

                                          • 0
                                            Подождите-ка, вопрос «Что это за приложения, которые необходимо написать быстро, причем выбирать для этого руби?» — это субъективное мнение? По-моему вполне дельный вопрос, на который возможен ответ из разряда «ну руби имеет больше встроенных библиотек, чище код, более быстрая работа, и т. д. (как варианты)», ни так ли? Если уж на то пошло, то почему лично я выбираю PHP я обосновал ниже более чем. Для того, наверное, вопросы и задаются более опытным, чтобы менее опытные в этой области могли сразу понять нужно ли это или нет, а не гуглить часами стек технологий, который в конечном итоге им может быть даже не понадобится. Не для этого существуют Тостеры, SO и тому подобные ресурсы? Да тот же Хабр. А уж если вдруг с каких-то пор комменты на нем вдруг перестали быть предназначенными для коротких ответов на короткие вопросы, то это тоже можно объяснить в тех же комментах. Поэтому и объясняю я такую реакцию пока только так, увы(
                                            • 0

                                              Я выше тоже писал, чем хорош руби по-моему: https://habrahabr.ru/post/341516/#comment_10503278. Интересное обсуждение с несколькими хорошими примерами было в этой ветке: https://habrahabr.ru/post/341516/#comment_10509174.


                                              Что это за приложения...

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


                                              Не знаю насчет рельсов

                                              Если действительно интересно, то сначала изучите то, что хотите критиковать (например: http://guides.rubyonrails.org/, https://www.ruby-lang.org/en/documentation/quickstart/).


                                              Касательно вашего вопроса: все, что вы перечислили, можно написать на руби.

                                              • –2
                                                Но ведь это чистой воды домысливание. Я специально еще в самом начале написал, что «я без всякого подвоха спрашивал», рассказал что умеет PHP, мол, вот я на PHP такое делаю, а чем так хорош руби, что его используют для такого рода поделок вместо PHP, и так далее. Мне казалось это очевидно. В недавней статье вскользь прошла мысль, что люди не умеют читать, и читают то что написано у них в голове (если вкратце, то человек рассказывал о своей прошлой работе в Яндексе, и высказал такую мысль дабы пресечь попытки обвинить его в том, что он воткнул нож в спину бывшего работодателя). Еще тогда подумал, надо же, как интересно подмечено. И ведь понимаю: сущая правда же. Только почему только на Хабре? Вроде бы ресурс для айтишников, умные люди и все такое, но нет…
                                                • 0
                                                  Что это за приложения, которые необходимо написать быстро, причем выбирать для этого руби? Лично я на коленке леплю скрипты на PHP

                                                  Специально не отвечал вечером, т.к. думал что с утра перечитаю эти фразы по-другому, как-будто вопрос с интересом написан. Но нет… :)


                                                  Извините, если я вправду неправильно её прочитал и все домыслил. Серьезно. Но на вопрос ответил уже.

                                                  • 0
                                                    Да, за ответ и за ссылки благодарю, собссно, ради чего весь сыр-бор и затевался. И отдельное спасибо за извинения, это дорогого стоит. Вы не поверите, но в таких ситуациях я оказываюсь время от времени. Чаще собеседники извиняются, и это не может не радовать, однако количество таких случаев все же удручает. И хорошо при этом если удается разойтись полюбовно, но тут все зависит от характера собеседника, бывает всякое. Самое худшее — это когда человек даже осознает что неправ, но всеми силами пытается выглядеть крутым в своих глазах и глазах окружающих, причем чаще окружающие с ним солидарны. Я много где сижу, но с таким сталкиваюсь только на Хабре. Даже недавно в очередном комменте (там эта проблема решилась спокойно, без поножовщины, но все же она имела место быть) сформулировал идею о том, что это, возможно, связано с большим объемом поступающей информации, которую мозг затрудняется обрабатывать подобно тому, как процессор в нагрузке пропускает такты. Возможно звучит логично, но все-равно не понятно: я такой же программер как и большинство аудитории тут, у меня так же имеется основная работа и проекты для души, я стараюсь максимально точно формулировать мысли, но самое смешное то, что неправы в большинстве случаев оказываются собеседники, но виноват в их глазах я. Мистика да и только!
                                          • 0
                                            А что означает «на PHP перепишу, если одобрят»?) По мне дак PHP идеально подходит и для «хоп-хоп и в продакшн», и для сложных проектов полного цикла.

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

                                            • 0
                                              Ох, и снова приветствую) Ах наоборот! Дак это другое дело. Но я как раз и не могу понять чем PHP не подходит конкретно для «хоп-хоп» «по быстрому»? Если, например, дырявость и некое побуждение писать плохой код, то тогда как он может годиться «для сложных проектов полного цикла»? По мне, как я говорил выше, он подходит и «для сложных проектов полного цикла», и для «по быстрому» благодаря своей динамической типизации, что позволяет держать в голове парадигму и реализовывать ее не отвлекаясь на мишуру к приведению всего и ко всему. И ладно, как это часто бывает в случае нелюбви к PHP, как раз эта самая динамическая типизация и ставит на нем крест в области «для сложных проектов полного цикла». Но тут я вдруг узнаю, что именно для этого он в финале и используется. На мой взгляд тут все еще имеется явное противоречие. Или причина тут все-так в другом?
                                              • 0

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

                                  • 0

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

                                    • +3
                                      да фиг его знает.

                                      Чем живет PHP — понятно. Самый очевидный выбор, много готовых CMS, много фреймов, много готовых решений для малого и среднего коммерса. Это никуда не уйдет.

                                      Чем живет Python — понятно. Один из самых простых языков для изучения, язык общего назначения, тестирование, devops, веб, дата-анализ. Мб. в каждом из направлений не так много людей, но в куче набегает порядком.

                                      Ruby — Да у него прикольная парадигма разработки, и весьма удобный веб-фреймворк. Но какого-то очевидного преимущества над Php/Python — он не имеет. Поэтому и видим тенденцию, что после хайпа, он начал сходить на нет.
                                    • –4
                                      Да просто руби такое авно как и похапэ.
                                      image
                                    • +1
                                      По статье сразу видно, что автор писал на python/R =)
                                      • 0
                                        Просветите неосведомленного куда смотреть
                                        • –2
                                          на статью :-)
                                          • +2
                                            Python/R — это специализация Дата Саенса — анализ данных, нахождение закономерностей, машинное обучение, построение графиков и прочее. Т.е. именно то, что мы и видим в статье.
                                            • 0
                                              А я думал это про какой-то особенный авторский стиль.
                                        • 0
                                          Я вообще тащусь с подобных тем. Не непосредственно с данного поста, а вообще с холиваров «нравится/не нравится язык программирования». Ниразу не видел спора на тему «мне молоток нравится больше, чем микроскоп». Особенно, если учесть, что одним и тем-же разработчиком порой в одном и том-же проекте приходится пользоваться и тем и другим.
                                          • –1
                                            Одно дело когда ты выбираешь, что ты ХОЧЕШЬ использовать, и другое, когда ПРИХОДИТСЯ пользоваться.
                                            • +2
                                              Учитывая, что многие языки имеют сильно пересекающуюся сферу использования (например C# и Java в плане для энтерпрайзного бэкенда, C# и Delphi для разработки под win-десктоп, C++ и Rust для системного программирования и высокопроизводительного кода, либо вообще живут на базе одной платформы и библиотек, как Java/Scala/Kotlin/Groovy), то это больше похоже на спор «молоток из Икеи лучше молотка из Леруа Мерлен» :)
                                              • 0
                                                ) хорошая аналогия, мне понравилась.
                                                Но даже для таких случаев можно углубиться в особенности языка и его окружения, чтобы определиться насколько он подходит/не подходит для решения задачи. Ну может, разве что за исключением Java-клонов, которые на мой (не спорю) неискушенный взгляд отличаются совсем немного синтаксисом и сортами синтаксического сахара.
                                            • 0
                                              Какой-то размазанный анализ по всем языкам, эффективней было бы разделить их на группы по общим направлениям. Хотя выделить язык в какую-то определённую группу тоже не всегда очевидно, но собирать «среднюю по больнице» смысла несёт ещё меньше.

                                              А вот сеть с полярными тегами очень занимательная вышла.
                                              • +3
                                                Любопытно, что backend хейтит frontend больше чем frontend — backend
                                                • +1
                                                  а перл хейтят все
                                                  • 0
                                                    Это логично, ибо фронтовые запросы количественно лидируют.
                                                    • +6
                                                      Бэкендерам чаще приходится возиться с фронтом, чем наоборот.
                                                    • 0
                                                      и (к моему удивлению) R против SAS

                                                      че там удивляться. SAS махровый мамонт из 70-х, все кто на нем пишут, не любят все новое, типа R. Ну и алаверды.
                                                      p.s. Это я вам сам как мамонт знающий SAS говорю.
                                                      • +4
                                                        Просто хипстерам пригорает, вот они и прут дизлайкать старичков. А тем кто пишет рабочие продукты на старичках, не досух ходить дизлайкать хипстерские языки.
                                                        Ну а сравнение в одном ряду (выше): C# vs Delphi и C++ vs Rust только подтверждает это.
                                                        • 0
                                                          Не вижу причины для пригорания у «хипстеров» (что за глупость вообще их так называть?), вот честно, новые инструменты часто действительно улучшают процесс разработки и ее результат, как самый простой пример: C++ до стандарта 11 года и после (особенно с core guidelines) отличается очень сильно сам от себя (осталось дождаться появления концептов, модулей, ranges и корутин), и реально, распробовав все современные прелести, копание в легаси-коде, написанном десяток лет назад вызывает большую тоску (благо, есть возможность постепенно переписывать и рефакторить), на Go отлично пишутся утилитки и мелкие сервисы, Rust многообещающ и несет в себе отличные идеи, и т.д.
                                                          Языки выше в один ряд я поставил только по сферам их применения, а вовсе не по «равноценности» или «равноприятности».
                                                          • 0
                                                            Обновления языка != миллионам различных frontend фреймворкам. Сравнение не корректно.
                                                            • 0
                                                              Так в статье речь именно про языки, а не про миллионы фреймворков, и мой комментарий тоже как раз про языки и их развитие (в виде новой версии стандарта или отдельного нового языка), а не про фронтенд-фреймворки.
                                                              • 0
                                                                Извините, а где вы в комментарии увидели frontend-фреймворки?
                                                            • +1
                                                              Дело в разном «профиле» использования тех или иных яп. Большинство программирующих на каком-нибудь delphi в основном занимаются поддержкой старых проектов и приятного в этом мало. Новые языки (скажем, rust/go) всегда привлекали оптимистичных энтузиастов. Однако молодые инфраструктуры этих языков ставят под сомнение коммерческую выгоду их использования в новых крупных проектах: специалисты на них в среднем менее опытные, дорогие и меньше представлены на рынке.
                                                              • 0
                                                                Дело не в профиле, а в проблеме курицы и яйца. Пока никто не платит за работу с новой технологией, никто не рвется изучать технологию. Так всегда было и всегда будет.
                                                                • 0
                                                                  судя по Salary and Experience by Language (2017) rust/go/clojure предлагают самое высокое соотношение зп/стаж. А вот с точки зрения работодателя выгоднее яп с самым низким соотношением.
                                                                  • 0
                                                                    Самое высокое — самое высокое. А я говорю о количестве спроса. Пусть там 1-2 компании платят хоть миллиард. А надо, чтобы платили много и вакансий было много. Хоть это и не очевидно, но я именно это имел ввиду. На hh сложно найти вакансии на Rust, например. Даже так, именно по Rust вообще ни одной не видел за прошедший год, было лишь «если у вас опыт на rust/go/scala, это очень большой плюс», а вакансия в итоге все равно какая-нибудь плюсовая. В итоге имеем вакансии только на плюсах, поэтому и изучать смысла особо пока rust нет, если хочешь его применять именно при устройстве на работу. А если уже работаешь и разрешается че-нить такое делать, то люди и в исследовательских целях и в реально нужных используют rust, и много кто так уже делает даже в россии (из крутых — касперский, яндекс, mail.ru — это точно).
                                                                    • 0
                                                                      было лишь «если у вас опыт на rust/go/scala, это очень большой плюс»

                                                                      это обычно означает «у нас большой проект преимущественно на плюсах, но некоторые его части мы уже делаем на rust/go, подходит отлично, нам нравится, и мы собираемся дальше двигаться в этом направлении, правда, нормального разработчика на rust/go найти сложно, поэтому мы возьмем плюсиста и сами научим его чему надо».
                                                                      • 0
                                                                        Кто знает. Лично я на конференциях по Rust не видел, чтобы об этом кто-либо говорил так, как вы сейчас. Говорили лишь, что мелкие проектики на нем пишут или в исследовательских целях, типа если взлетит, то будут и дальше дописывать на нем.
                                                            • 0
                                                              А мне Pascal нравится. За 11 лет работы, много всяких вкусностей создал для работодателей и для себя лично. И главное — быстро, просто и понятно.
                                                              • 0
                                                                Для себя написал пару программулек на Lazarus. Конечно догадываюсь почему Delphi попала в немилость. Основная причина-не кроссплатформенность.
                                                                • 0
                                                                  Скорее цена лицензии. Кроссплатформенность-то уже имеется: Linux, OS X, iOS и Android.
                                                                  • +3

                                                                    Delphi попала в немилость только по причине стратегических\маркетинговых ошибок компании Borland (включая сюда появление C# и .net, в первую очередь, как ни странно).

                                                                    • 0
                                                                      Делфи уже как бы давно кроосс-платформенный :)
                                                                    • +1
                                                                      А на каких языках вы еще пишите, что вам Pascal нравится?
                                                                      • +1
                                                                        BASIC и КУМИР
                                                                        • +1
                                                                          Приходилось на Java, PHP, Python, C, C++. Всё зависило от задачи.
                                                                      • +2
                                                                        О мертвых принято говорить либо хорошо, либо ничего. Приятно осознавать, что Perl еще не умер.
                                                                        • –1
                                                                          Для меня Delphi лучше, чем C++ Главное — как реализовываешь программу…
                                                                          • –2
                                                                            А для меня одного из проектов в моём отделе — VBA :)
                                                                            И я спокойно на нём пишу, когда надо.
                                                                            • –2
                                                                              … тоже писал на нем недолго (после BASIC для ZX), но Delphi оказался интересней, вот JavaScript думаю подучить ибо тоже нравится… :)
                                                                              • 0
                                                                                Delphi eще к Office не прикрутили. Поэтому только VBA — только хардкор
                                                                                • 0
                                                                                  Если речь про экспорт из базы данных в Excel или генерацию документов в Word, то всё легко делается через ActiveX (через который, кстати можно на Delphi даже модули для AutoCAD делать и не только)
                                                                                • +1
                                                                                  Прямо какой-то слёт SEOшников
                                                                                  • –2
                                                                                    Сам то чьих будешь?
                                                                            • 0
                                                                              Для разгона вентилятора было бы неплохо дополнить перевод альтернативным голосованием для пользователей хабра =)
                                                                              • 0
                                                                                А я программирую чтобы на кушать заработать, а не чтобы меряться пиписькой с кемто.
                                                                                Лучше, хуже… ошибочное понятие.
                                                                                Есть полезный инструмент и бесполезный.
                                                                                И каждый решает под задачу, какой ему нужен инструмент.
                                                                                • +3
                                                                                  А кто-то хочет вкладывать душу в свое занятие и делать свою работу максимально хорошо.
                                                                                  • 0
                                                                                    И начинает тащить в проект под этим предлогом, кучу всего новомодного, а что бы было этому обоснование идет и хейтит неможные технологии.
                                                                                    • 0
                                                                                      Тот, кто считает продакшн отличным полигоном для модных штучек — ненормальный человек.
                                                                                      • 0
                                                                                        И, кстати, вы так говорите, будто хейтинг — это что-то плохое)
                                                                                        Человек перестает считать себя экспертом в сабже и просто выключает отображение вопросов на эту тему. Тру-хейтер же лезет миссионерить в комментарии.
                                                                                      • 0
                                                                                        И поэтому берет микроскоп и забивает хлеб в доски.
                                                                                        Но он вкладывает душу в работу и даже через время у него начнется получаться.
                                                                                        • 0
                                                                                          Почему же? Он в курсе, что от этого пострадает проект.
                                                                                          • 0
                                                                                            Тогда такого надо гнать ссаными тряпками.
                                                                                    • +2
                                                                                      Майкрософт прямо монополист в сфере ненавистных технологий.
                                                                                      • 0
                                                                                        Даже вернулся перечитал список, МС там не особо представлен :)
                                                                                        • +2
                                                                                          в списке «самых нелюбимых тэгов» один — microsoft, и еще 11 из 20 — технологии microsoft
                                                                                          • +1
                                                                                            internet-explorer
                                                                                            visual-basic
                                                                                            asp-classic
                                                                                            microsoft
                                                                                            webforms
                                                                                            vb6
                                                                                            asp
                                                                                            sharepoint
                                                                                            ms-access
                                                                                            iis
                                                                                            vbscript
                                                                                            Это всё тэги так или иначе относящиеся к microsoft.
                                                                                            Справедливости ради надо сказать, что половина там — это старые технологии(vb, asp, webforms).
                                                                                            • 0
                                                                                              Что подтверждает:

                                                                                              Просто хипстерам пригорает, вот они и прут дизлайкать старичков. А тем кто пишет рабочие продукты на старичках, не досух ходить дизлайкать хипстерские языки.
                                                                                          • 0
                                                                                            А то!
                                                                                            Вон в том же VBA есть волшебные штуки: goto, on error resume next (само по себе дичь, но оно еще и допустимо глобально), месседжбокс при любой ошибке или опечатке в коде, одновременно поддержка и ООП, и функциональщины, можно строго типизировать, а можно везде variant лепить… Надо быть очень терпеливым, чтобы ковырять чужой код на VBA. Для отладки нужно вообще быть просветленным.
                                                                                            Но как инструмент VBA незаменим и довольно важен. Вот и хейтят.
                                                                                            • 0
                                                                                              VBA незаменим

                                                                                              А как же .NET?
                                                                                              • 0
                                                                                                VBA это макросы в документах: юзер открыл excel, а у него сразу подтянулись куча зависимостей из БД и интернета, подтянулся курс доллара, все пересчиталось, сбекапилось на сетевую шару, запустило ядерные ракеты. Возможности там действительно очень большие, ибо доступен весь winapi и куча либ\компонентов. Я на нем даже софтину писал, объединяющую фотошоп, корел и ексель для учета в фотостудии…
                                                                                                Как его на .NET заменить, не знаю.
                                                                                        • 0
                                                                                          Не объективно совсем, если сравнивать количество разработчиков в каждом языке. Ясен пень что на R пишут единицы, а PHP ненавидит большинство.

                                                                                          P.S. Perl вообще жив?
                                                                                          • 0
                                                                                            Помоему PHP ненавидят только те, кто на нем не пишет и продолжают поддерживать эту идею. Только PHP7 никто не обсырает, потому что эти самые обсыратели его не видели похоже.
                                                                                            • 0

                                                                                              Скорее те, кто вынужден время от времени копаться в PHP-коде, который написан в <5.3 стиле.

                                                                                              • –1
                                                                                                php стоит ненавидить только за new this
                                                                                              • 0

                                                                                                В сфере Data Science и статистики на R пишут единицы десятков миллионов

                                                                                              • 0

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


                                                                                                Странно что нет моего любимого языка c++ builder. Это язык на котором я пишу для себя. К сожалению

                                                                                                • 0
                                                                                                  C++ Builder — это все-таки не отдельный язык, а C++ среда разработки и сложившиеся подходы (типа библиотеки VCL).
                                                                                                  Сам по себе язык C++ живет и здравствует, а конкретно с C++ Builder та же проблема, что и с Delphi (особенно учитывая, что это творения одной и той же компании) — из-за странного маркетинга и стратегии его создатели упустили свою долю рынка.
                                                                                                  • 0
                                                                                                    C++ Builder — это все-таки не отдельный язык, а C++ среда разработки и сложившиеся подходы

                                                                                                    Наверняка речь шла о C++ с некоторым набором расширений или диалекте C++. Например, там есть свойства.
                                                                                                • 0
                                                                                                  Интересно, а в статистике учитывается количество голосовавших?
                                                                                                  к примеру сообщество (а соответственно и ненавистников) php которому уже больше 20 лет гораздо больше, чем у swift.

                                                                                                  По критерию количества ненавистников естесственно в топ попадут наиболее старые языки.Не все правда старые языки настолько ненавистны, но вот по новым языкам выборка 100% не репрезентативна.
                                                                                                  • 0
                                                                                                    Потому что смотрится не количество ненавистников, а соотношение количества ненавистников и любителей.
                                                                                                  • 0

                                                                                                    Писал на множестве языков, не люблю regexp (да, да "ниасилил"). Люблю SQL но терпеть не могу его реализацию T-SQL. Все остальные хороши по-своему.