Как стать автором
Обновить

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

Время на прочтение 3 мин
Количество просмотров 68K
Всего голосов 39: ↑31 и ↓8 +23
Комментарии 282

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

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

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

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

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

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

И «Сколько раз в неделю» =)
НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

По мне так любой программист должен владеть хотя-бы одним функциональным языком, а зная один освоить другой не сложно.
А если там другая парадигма? Скажем с ООП перейти на функциональное программирование? А с императивного на декларативное? И вообще, можно 2-3 дня потратить только на то, чтобы незнакомый стек заставить работать на своей машине. А еще незнакомые фреймворки, незнакомые инструменты разработки… Я допускаю, что Hello World по мануалу на чем угодно делается достаточно быстро, но это не «разобраться».
Как парадигма может быть «другой» для специалиста? Если ты не можешь мыслить в разных парадигмах, то ты, как утверждали выше, — макака.
НЛО прилетело и опубликовало эту надпись здесь
Ты сказать-то что хотел?
НЛО прилетело и опубликовало эту надпись здесь
Стандартный вопрос: сколько лет и на каких языках вы пишите?
Хм… Ну ладно.
~30 лет.
Языки в примерном порядке их изучения:
8080 assembler
Basic
C
8086 assembler
Pascal
C++
Prolog
ARM assembler
Java
Perl
Ruby
Python

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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


Статическая типизация хороша хотя бы тем, что позволяет выловить ошибки типов еще на этапе компиляции. Ну и да, даже говноскрипты можно писать на Haskell, мне вот недавно поведали сие тайное знание.
Ну и да, даже говноскрипты можно писать на Haskell, мне вот недавно поведали сие тайное знание.
Можно и на Go, кстати. У Android билд-система с python на Go переезжает.
НЛО прилетело и опубликовало эту надпись здесь
Ложка хороша хотябы тем, что когда ешь суп, жидкость не вытекает между зубчиками
xxx: Народ! Какая ОС лучше: Windows 8 или Linux Mint 14?
yyy: Что лучше, ложка или вилка?
zzz: Вилка, ей суп интересней есть.
from bash.{org|im}
НЛО прилетело и опубликовало эту надпись здесь
Глупая картинка же. Это все равно что сравнивать яблоки груши.

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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


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


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


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


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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Хорошая программа на C++ может быть близка к хорошей программе на Java по своим эксплуатационным характеристикам — но устроены они должны быть сильно по-разному.
НЛО прилетело и опубликовало эту надпись здесь
>Зачем исользуется оператор отсечения в прологе?
Справедливости ради, пролог это такая вещь в себе, ни на что промышленно используемое не похожая.
И именно поэтому, когда у вас возникнет задача, хорошо ложащаяся на Prolog вы трижды подумаете перед тем, как раскнёте его использовать — так ведь?

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

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

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

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

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

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


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


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


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


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


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


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


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


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


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

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

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

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

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

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

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

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

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

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

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

И если вы будете присать программу на Haskell так же, как вы бы писали её на C++ (а никак иначе человек без опыта не сможет её написать) по указанию «гениального» архитектора — то ничего, кроме проблем, вы не получите…
Похоже на generics из java.
// На плюсах никогда не писал
Синтаксически дженерики и шаблоны похожи. Но работают они совершенно по разному.
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 вообще нет его прямого эквивалента, потому что специализация дженериков не предусмотрена. И это только одно отличие в одном аспекте одной концепции. А всего их всех многие сотни.
Визуально 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++ — это нормальный способ возврата нескольких значений из функции…
НЛО прилетело и опубликовало эту надпись здесь
И вот тут вы немедленно упираемся в вопрос: а стоит ли уменьшение времени компиляции изобретения своего диалекта языка? Потому что в реальном мире вы, зачастую, в проекте живёте не один и знать про всё, что там бывает, не можете.

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

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

P.S. Кстати этот код принимают и clang и gcc, так что если у вас нет Windows, то шанс заметить эту проблему при беглом взгляде — невелик…
НЛО прилетело и опубликовало эту надпись здесь
А чем -pedantic поможет? Как разрешить обычные designated initializers, которые в сотне мест используются, не разрешая при этом VLA?
НЛО прилетело и опубликовало эту надпись здесь
А если серьёзно, включение одних расширений языка так, чтобы не включать другие — вопрос опций вашего компилятора.
Да, конечно.

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

Соответственно как только вы включаете designated initializers — так тут же «забесплатно» получаете и поддержку VLA…
НЛО прилетело и опубликовало эту надпись здесь
Чё-т вы как-то серьёзно слишком мою иронию восприняли.
Профдефомация: просто мы как раз искали способ запретить VLA без запрета designated initializers — и ничего толком не нашли… Хотя надо на clang 8 посмотреть, может там чего изменилось…
НЛО прилетело и опубликовало эту надпись здесь
Пасиба. Потому что в самом сообщении указывается на -Wc99-compat который выключает слишком много.
Вот как раз std::tuple не использует никакой хитрой магии, и сделать его в Java довольно просто, с поправкой на ссылочность типа, отсутствие сахара и на ограниченность числа параметров. Кстати, первые две беды в C# преодолели.

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

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

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

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


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

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

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

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

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

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

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

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

Вот еще аналогичная: www.weblakes.com
зарплаты слегка ниже чем по рынку.

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

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

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

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

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

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

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

Это вброс или вы серьёзно? Куча энтерпрайза плотно сидит на .NETе, так же как и на Java.
Насчёт востребованности классики… Она ведь востребована не сама по себе, а благодаря своей способности встраиваться во что-то другое, «авангардное».

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

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

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

Платформы умирают, а универсальные языки находят себе применение.
Некая практическая польза есть у рейтинга «популярности» языков среди вакансий. А сколько людей на каком языке пишет не особо полезная информация с практической точки зрения. И неважно какой методикой измерять.
Количество запросов по тому или иному языку в поисковике коррелирует ведь не только с частотой его использования, но и банально с его сложностью/непонятностью. Поэтому методика оценки популярности по количеству запросов действительно так себе.
Она много с чем еще коррелирует — с модностью (чем моднее — тем больше новичков которые ищут решение), с понятностью и полностью мануалов (скажем, при использовании матлаба я крайне редко что-то искал в интернете) и наверняка еще чего можно придумать. Еще есть интересный момент, например, запрос «obj-c  работа с сокетами» на самом деле будет описывать plain c (CoreFoundation как и еще куча низкоуровневых фреймворков имеют интерфейсы на чистом с), но вот запишется ли такой запрос в зачет C большой вопрос
Если судить по стоимости книг, самый популярный JavaScript
Вы имеете ввиду самые дорогие или самые дешевые? Если взять топ дорогих IT-книг на русском, то мне попались в основном по алгоритмам, Java и базам данных. JavaScript-книги по цене подешевле будут.
Мне кажется, единственно верная метрика — число открытых вакансий. Но она, внезапно, регионо-зависимая.
Метрика гитхаба — по количеству пулл-реквестов — очень сильно сломана. Лидерство JS понятно просто потому, что современный JS это куча мелких пакетов с учебным говнокодом, который обречён ломаться везде и всегда. То MS/Apple выкатит новый браузер с новыми багами, то node — очередной ежемесячный ломающий совместимость релиз. Вот и фиксят.
Про метрики гуглёжки я даже не хочу говорить, они сломаны ещё больше.
В голосовалке не хватает пункта «1С»
и kotlin
и D
Ерунда все эти рейтинги. Если зайти на Тостер, то по количеству вопросов ( т.е. запросов) лидируют теги Javascript — 50806, PHP — 46875, Python — 13467.
На количество вопросов как минимум ещё влияют качество документации ЯП и неумение гуглить среднего ЯП-юзера. На большую часть вопросов с тостера отвечают первые 2 ссылки с гугла при правильной постановке.
Интересная мысль. Документация что у JS, что у Python — хорошая. И что тогда TIOBE меряет? Если человек не догадался зайти в доки почитать, и задал вопрос в гугл-вот и растёт рейтинг языка. Было бы интересно, если бы этот рейтинг составляли по числу посещений документации ЯП.
Искать в документации с помощью Google во многих случаях проще. Обычно так и делаю. Google у меня уже дрессированый, первой строкой(максимум второй если в нескольких языках такое есть) нужное выдаёт. А дальше уже по ссылкам в документации.
Это, кстати, смещает выборку ещё больше. Ибо про python set я буду искать либо «python set», либо «python 3 set», а вот про C++ — как «std::set».

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

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

Неизвестно какого уровня запросы в поисковых системах, по которым рассчитывается индекс TIOBE. Может, тоже дошкольного, типа Should I learn PHP or JS?
И в правду какая то ерунда, ваша таблица лучше отображает действительность! Только выборка чуток не репрезентативная.
Можно измерять объём кода написанного на некотором языке программирования за всё время, в символах. Или взять производную по времени от этого показателя, и таким образом узнать скорость с которой пишется код (добавляется в мировое достояние) за единицу времени: за день, неделю, месяц, квартал, год.

Разные области программирования имеют разный вес. Думаю что для веба написано намного больше кода чем для встраиваемых систем. Сравнивать нужно взаимозаменяемые языки. Для системного программирования один рейтинг, для веб-программирования другой.
по-символьные метрики уже проходили, не работает это. Лучше измерять сущностями, операторами и отдельными элементами языка. Но и это измерение неидеально. Не отражает оно ни сложности программы ни её объёма т.к. не учитывает применение фреймворков.
хз, я как писал на Objective-C так и пишу, на Swift я не переходил и надеюсь не придется
Почему надеятесь что не придется?
Потому что я люблю Objective-C, он красивый, простой, надёжный и родной… а сказать такое же про Swift я не могу – какая там уже по счёту версия swift появилась без обратной совместимости? А как там дела с обертками для сишного кода? А синтаксис этот подобный C/js/as/java/… не утомил ещё никого?
Где мой Kotlin?
На чем основаны ваши выводы?
НЛО прилетело и опубликовало эту надпись здесь

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


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

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

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

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

__

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

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

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

PHP — веБ

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

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

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

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

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

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

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

____

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

Т.е. например, Питона много, но по факту он просто упоминается во множестве вакансий, как «хорошо бы было бы знать». Это популярность или нет?
В голосовалке SQL нет :(
SQL — это декларативный язык программирования.
Хотя, в списке есть другие декларативные языки программирования — функциональные.
Причём, PL/SQL, поддерживающий императивное программирование — тоже в списке отсутствует.
В отличии от них, SQL не является тьюринг-полным. И в общем-то это вспомогательный инструмент. А PL/SQL не попал в список ввиду малого количества разработчиков, естественно.

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


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

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

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

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

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

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

НЛО прилетело и опубликовало эту надпись здесь
Третья проблема например в том, что линкедин — гребаные спамеры, которых многие ненавидят? А кое-где вообще забанили на государственном уровне.
НЛО прилетело и опубликовало эту надпись здесь
Нужно разделять:
1) Я оказываю услуги по написанию корпоративного софта
2) Я пишу свой софт на продажу
3) Мне скучно я эксперементирую

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

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

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

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


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

C# vs Java on Linux
Web Framework Benchmarks

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вот скажем — вы же помните, что оракл начал «монетизацию JDK»? Это кого-то волнует? да собственно не особо. потому, что налажены стабильные выпуски OpenJDK, и все просто будут использовать OpenJDK. Потмоу что есть ещё пяток другой джава-машин (ну или был точно) — которые можно взять и начать использвоать. Потмоу что совместимость обеспечивается процессом сертифкации. В итоге — никто особо не парится из-за действий оракла, хотят они свои сборки продавать — ну пожалуйста — может кто и купит. Но окромя оракловой есть ещё несколько других джава машин, и сборок, и майнтенеров джавы среди которых, скажем IBM, и уже его одного хватит не пустить это дело на самотек, вне зависимости от недалекости менеджеров оракла, уже, показавших свою «мудрость» попытавшись спихнуть ОпенОфис на обочину истории.

А вот что вы будете делать _когда_ майкрософт прекратит поддержку Roslyn и, скажем, выпустит .Core2 уже совсем не опенсорсный? да хотя бы поменяет лицензию — мол «теперь все коммерсы дожны платить деньги, за обновления и секьюрити патчи»… И вот если в этот момент у вас нет альтернативного майнтернера, открытого стандарта и процесса сертификации этот стандарт подтверждающего и, собственно реализующего, нет альтернативного компилятора и среды, лишенной этих секьюрити проблем — … в этом случае, перспективы вашего софта — если ваш софт большой, долгоживущий и написан на .core — «печальны», а все деньги вложенные в разработку на шарпах — уже начали накрываться медным тазом. В лучшем случае — вы попадаете на проблемы смены майнтейнера проекта Roslyn — а это дело очень шаткое… или попадаете на непонятные перспективы миграции, или поклонения майкрософту деньгами в новой жизни с .Core2, не опенсорстной и может даже не бесплатной (см условия задачи)…

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

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

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

Да и вообще я не очень понимаю что за «разные мантейнеры» у любой неопенсорсной энтерпрайзной платформы (от того же Oracle и SAP, до 1С), и когда это кого останавливало.

И ещё вопрос про «шашечки» и «ехать»: если на Mono работает — какая разница что там с тестами и сертификацией? Конечно, энтерпрайз любит сертификаты, но… Если МС что-то там монетизировать станет (хотя, очевидно, нет — они продают винду, а не фреймворк) ничего фатального не случится.

> «переносимость софта между платформами»

Знаете, если не придумывать себе лишние платформы — потом не надо радостно решать несуществующие проблемы.

> А вот что вы будете делать _когда_ майкрософт прекратит поддержку Roslyn и, скажем, выпустит .Core2 уже совсем не опенсорсный?

Наверное, то же, что вы будете делать, когда Oracle выпустит Java2 без стандартов и сертификаций? Форкну (подожду, пока IBM/JetBrains) Roslyn и пойду выпью за светлую память.

PS. Мне кажется с Java вас это беспокоит в силу тяжелой судьбы Java, которую то открывают, то закрывают, то монетизируют. Это само по себе не признак «хорошей среды».
Наверное, то же, что вы будете делать, когда Oracle выпустит Java2 без стандартов и сертификаций? Форкну (подожду, пока IBM/JetBrains) Roslyn и пойду выпью за светлую память.

вы перемешиваете 2 момента.

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

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

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

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

2. кроме того, вы кажется не понимаете, что в этой ситуации джава отличается от c# как минимум тем, что не оракл выпускает новый стандарт джавы. не только они.

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

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

с шарпами все не так, согласитесь.

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

вот когда ситуация с c# станет аналогичной хотя бы js — тогда и можно будет говорить, что шарпы начали конкурировать с java. но майкрософту не интересно выпускать контроль за разработкой шарпов из своих рук — потому забудьте про эти мечты.
> если вы надетесь, что форкнутая, взятая на поддержку новым разработчиком система, без тестов/стандартов/сертификации будет продолжать работать точно так же как старая версия до форка

Я думал вы 2 комментария назад пытались (так же неаргументированно, впрочем) рассказать о проблеме с обратной совместимстью БЕЗ смены мантейнера.

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

Повторяю, .Net framework — часть винды. В энтерпрайзе винду используют. Но вас именно .Net framework, почему-то смущает. Пока вы не объясните почему — рассуждать про смену мантейнера можно только за рамками Support Lifecycle и premier support. То есть лет через 20.

Так что ни о каких внезапных дефолтах речи не идет.

> с джавой же у вас в принципе не будет проблемы смены майнтейнера. у вас уже есть несколько полнодействующих сборок джава машины

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

> вот когда ситуация с c# станет аналогичной хотя бы js

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

Повторяю, .Net framework — часть винды. В энтерпрайзе винду используют. Но вас именно .Net framework, почему-то смущает. Пока вы не объясните почему — рассуждать про смену мантейнера можно только за рамками Support Lifecycle и premier support. То есть лет через 20.


речь шла не об «использовании виндоус в интерпрайзе». Речь шла о конкуренции с java. Винду используют. никто не отрицает. в своей области. на рабочих станциях. word+excell запускать, доступ к веб-интерйесу обеспечивать, да принтером управлять )
Это все написано в том числе и на .net. И это замечательно. Переход от C++ и WinApi к технологиях шарп+дотнет — в их случае улучшил ситуацию. winapi — та еще кака. Но к конкуренции с джавой это не имеет никакого отношения.

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

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


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

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

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

>> когда есть стандарт, но его никто не соблюдает? Это лучше одного мантейнера и открытых исходников Core?


во первых, ECMA262 соблюдают. не настолько, наверное, насколько хотелось бы — но соблюдают. стараются. и официальный процесс сертификации улучшил бы ситуацию. но уже сейчас те-же Noshorn, V9, Rhino и др джавасрипт-машины вполне совместимы, что бы переносить js-код между ними, и беспокоиться не о том, будет он работать или нет, а беспокоиться о том насколько быстро, и будет ли у вас API для отладки вашего js-кода и насколько это api удобно. Другое дело, что разработка больших систем на языке с динамической типизацией — дело крайне не благодарное, и, имхо, даже глупое, но при медленном процессе, статичности требований, и некой мере безумности авторов — это может сработать.

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

Что предлагает майкрософт? изменивую моду и следование за ними. Вчера был просто .net, сегодня они вводят модную .net core (под которую надо снова переписывать код), завтра ещё что… каждый чих _единственного_ производителя вливается в хорошую копеечку производителям больших систем — и производители вынуждены петь под эту дудку за свой счет. А это все — в долгой перспективе и с большой кодовой базой — крайне не интересно и крайне затратно.

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

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

> Так же говорил, что не имея эталонного описания поведения и процесса проверки — вы не способны выяснить — изменил ли этот патч ещё что либо?

Внутри МС тесты есть и патч лишнего не изменяет. Зачем это потребителю — не понятно. Потому, что в джаве так — не повод.

> И в итоге совершенно не важно на чем написана у вас ваша джава машина — на какой кодовой базе, опенсорсная она или нет — если она «одинаково вращает байткод» — то это совместимая джава машина

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

> во первых, ECMA262 соблюдают. не настолько, наверное, насколько хотелось бы

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

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

Например. Думаю что всем очевидно что в вебе самые популярные это: js, php и sql (если его можно считать языком). Потом идет группа 2: питон, ruby, java. Но я не спец и могу ошибаться.
Если взять разработку под windows, то наверное в первом эшелоне будет нечто вроде: c#, c/c++. Во второй группе, например, будет питон и java.
Ага, а то все эти рейтинги выглядят как опрос «самая популярная медицинская профессия” и варианты ответа – медсестра и нейрохирург. Как вы думаете, какое будет соотношение….
Уважаемые гуру, а человеку, который только начинает учиться программированию, какой язык вы бы посоветовали в качестве самого перспективного?
Мне кажется, новичку нужнее язык доступный и понятный, а не перспективный.
который надо не зыбыть сменить на что-то «не учебное» в конце обучения.
ибо боевой истребитель — он не для тех кто только учится.
для учебы — учебные самолетики, простые в управлении.
В качестве перспективного где?

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

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

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

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

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

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

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

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

легаси код пожалуй должен иметь отрицательный баланс — его пишут от безысходности на конкретном языке
НЛО прилетело и опубликовало эту надпись здесь
Я думаю, что самые популярные ЯП — это…

А где Tcl/Tk


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

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


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

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

Всем привет. Создал курс по Основам программирования с видео лекциями. Советую всем пройти. stepik.org/course/5482/syllabus
Очень странно что карму не слили ещё за спамерский пост.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории