Comments 282
Логика подсказывает, что тот, на котором больше людей пишут код.
Но вот как это посчитать без переписи программистов — решительно непонятно.
Вобщем, только перепись. Причем не добровольная, а принудительная (ибо фанаты новых языков могут устроить хайп, а труженик того же энтерпрайза забьет на любой опрос, ибо семью кормить надо, а не фигней страдать). А это, очевидно, утопия.
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 (могу во «фрагменты», могу в «активити»).
Работаю практически каждый день, локально/удаленно — без разницы.
Учился на радиофизическом, в программирование пришел из поваров. РФ.
Основное направление — разработка автоматов функционального тестирования.
какие языки изучал в ВУЗе, и в каком году, чтобы знать насколько обучение релевантно рынку
Обучение популярным языкам программирования — это не задача вуза, поэтому отразит лишь популярность некоторых языков среди преподавательского состава.
Бльше людей пишут код — в средней школе все писали на бейсике так-то, не показатель.
P.S.
А еще, у меня нет ни одного знакомого, который бы умел в руби, ни то чтобы прям писал на нем.
Небольшой личный опыт: мой друг-медик скачал какое-то обучающее программированию приложение и там был именно JS как язык, на основе которого объясняют основы.
Так вот 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
Python и Ruby популярны в Пиндостане, при этом в Европе PHP в разы больше.
P.S. У меня есть две знакомых, которые писали на Ruby, один пока был в Пиндосии, второй дома в Украине.
P.P.S. Java — study once work everywhere!
По вакансиям в Европе я бы так не сказал. Тут PHP зависит от страны, но обычно минимум в раза два больше, чем Python.
По честному, Питон будет лидером с очень большим отрывом, если вспомнить, что его используют в своей работе далеко не только программисты.
перейти на другой языкЛюди пишушие на одном языке — макаки, а не разработчики. Нормальный разработчик выбирает язык и тулсет под задачу
Я вот как-то не встречал еще в своей жизни спецов, которые абсолютно одинаково (с точки зрения качества кода) могут писать на нескольких языках.
никто не будет тратить лишние деньги на поддержку новой инфраструктуры из-за того что язык А быстрее языка Б на 5% в конкретной задаче.А если на 50% больше прибыли, то будет. В любом случае ваш пример к моему коменту отношения не имеет.
В идеальном мире да.В таком случае идеальный мир от нашего отличается, только тем, что в идеальном вещи своими словами называют.
Я вот как-то не встречал еще в своей жизни спецов, которые могут писать на нескольких языкахЗначит вы вообще не встречали спецов.
Senior PHP EngineerНеудивительно.
которые абсолютно одинаковоВы что ситх? Ведь только они все возводят в абсолют
Неудивительно.
Бог ты мой, как только я осмелился на тему ИТ говорить со спецами на «тру» языках, все ухожу ухожу.
Ну да, многим обидно осознавать себя на этом уровне. Ведь мы курсы по фронтенду закончили, на первую работу устроились, мы теперь востребованные сверхлюди! А он нас макаками назвал! С этим я не могу ничего поделать.

— Вам нужно время, чтобы адаптироваться к языку (синтаксис, ключевые методы-операторы-функции, специфики)
— Вам нужно время, чтобы вникнуть в предметную область
— Вам нужно время
Или иначе, попробуйте объяснить семье, что вам нужно 2-3 месяца по вечерам, чтобы перейти на новый язык, поэтому вы будете снимать квартиру и жить отдельно это время.
В лёт перейти с одного языка на другого в ущерб материальным ценностям, карьере и т.д. могут только студенты, у которых пока еще нет ответственности и обязанностей.
Правда, я уже знал Haskell…
Семантика владения в Rust далеко не рокет сайенс.
И я уже знаю хаскел, так что не предвижу проблемы с камлаом, даже объектным.
По мне так любой программист должен владеть хотя-бы одним функциональным языком, а зная один освоить другой не сложно.
~30 лет.
Языки в примерном порядке их изучения:
8080 assembler
Basic
C
8086 assembler
Pascal
C++
Prolog
ARM assembler
Java
Perl
Ruby
Python
Не изучал «глубоко», но вполне понимаю и способен поправить программы на PHP и Javascript.
Может что еще забыл…
Понятно что сейчас я пользуюсь в основном актуальными языками, для меня это:
C/C++
Java
Python
Иногда Ruby, но только для своих собственных проектов
С++ — есть опыт серьезного использования boost? Все остальное достаточно слабо работает с типами, переход на язык, в котором типы данных играют более существенную роль будет вызывать затруднение.
Что бы утверждать, что теперь совсем любой язык будет учиться за 2-3 дня надо попробовать освоить Idris, Mercury и Rust. Или сразу ATS.
P.S. Субъективно: после Haskell и Rust — читать код с Boost слегка… неприятно, наверное. ИМХО Haskell вполне достаточно для представления о приличной системе типов.
Т.е. я успел достаточно с ним поиграться чтобы понять, что чтобы на декларативном языке сделать что-то реально полезное, в него зачем-то напихали кучу костылей чтобы превратить его в императивный. На мой взгляд, если «вдруг пролог взлетит» на тех-же квантовых компьютерах, на нём стоит писать только ядро задачи, а всю обвязку на чём-то другом.
Так получилось что с boost-ом я практически не знаком, т.к. в момент его расцвета ушел с головой в Java-у, а вернулся уже на С++11/14 где смысла приплетать boost насколько я понимаю практически нет (возможно для каких-то задач он и сейчас актуален, я не знаю, в наших проектах его нигде нет).
Честно говоря все эти слова " Idris, Mercury и Rust. Или сразу ATS.", кроме Rust-а мне ничего не говорят, так что время тратить не хочется, но если там нету кардинальной смены парадигмы (типа как в функциональных языках), то всё еще не вижу почему их нельзя изучить, ну пусть не за 2-3 дня, но за неделю две, как меня тут поправляют.
А классический Prolog ограничен в практическом применении из-за его строго бинарной логики.
В Mercury есть линейные типы, на которых сделан ввод/вывод (что позволило не тащить в логический язык много императивщены).
Меcто Prolog сейчас начинают заменять системы удовлетворения ограничений и SMT-солверы. Тоже, кстати, нетривиальная тема.
[x for x in range(3, n, 2)]
Или вот, на Lisp-е научитесь писать этот код за 3 дня?Да, там нет list comprehension, но можно все тоже самое сделать стандартными функциями и/или лямбдами.
Конкретно для этого выражения эквивалент:
(3...n).step(2).to_a
Насчет Lisp-а, честно говоря я в него глубоко не вникал, но на поверхностный взгляд я не вижу чем он принципиально отличается от динамических языков программирования (тех-же Python, Ruby), но при этом имеет соврешено человеко- нечитаемый синтаксис. Т.е. я понимаю, что это был практически первый язык программирования и его синтаксис в первую очередь обусловлен простотой парсинга, а не простотой для понимания человеком. Но работать на таком сейчас…
Возможно есть какие-то современные IDE, которые делают эту кашу читаемой, могу ошибаться но насколько я в курсе для Lisp даже нормального бесплатного компилятора нет, не говоря про IDE. Поэтому в ту сторону даже смотреть не собираюсь. Опять-же на мой взгляд вся сложность программирования на Lisp — это «превозмогание» его синтаксиса, а не какие-то концептуальные вещи…
0xd34df00d, благодарю, но я ещё не дорос.
А в чем я не прав? Если человек находится на том профессиональном уровне, на котором изучение новых языков\технологий представляет для него проблему
А если он уже находится на том уровне, когда изучение каких-то новых языков/технологий банально не представляет для него интереса? Зачем тратить время на очередную свистоперделку, изучать её, если можно за это время продвинуть свои проекты на известной платформе, или там позаниматься любимым хобби. А свистоперделка все равно через год-два выйдет из моды, и на её место три других придет.
Приведу пример из реальной жизни:
У нас в проекте одним китайским товарищем была написана программка для генерации ресурсов в необходимом формате, по сути конвертер, на Java. Программка была замечательно написана с точки зрения ООП, такая развесистая клюква на 10+ классов и несколько тысяч строк кода.
Я заменил всю эту лабуду простенькой программкой на python в 200 строк кода, которая стала гораздо проще в понимании и дальнейшей поддержке.
Приведу пример из реальной жизни:
У вас же пример не забивания гвоздей микроскопами, а обычного оверинжиниринга. Я в жизни не поверю, что на Java нельзя было уложиться в сопоставимый с пайтоном объем кода (пусть не столько же, ну в полтора раза больше, а не в десять-двадцать раз). При желании, естественно.
А в остальном, я действительно многократно убеждался, что менять фреймворки/платформы для своих проектов — неважнецкая идея. Годится только в том случае, если выбранный изначально был корявым и/или нестабильным. В остальном затраты на изучение/перенос/адаптацию к фичам практически никогда не окупаются. Поэтому можно смело пропускать все обновления, и только когда приходишь в новый проект, разбираться с тем фреймворком/платформой, которые актуальны для него и в текущий момент времени.
1) Чтобы в Java работать с набором данных нужно как минимум завести класс (можно конечно не заводить, но это только все ухудшит), и зачастую добавлять в него какие-то «стандартные» вещи (copy constructor, equals, и т.п), а в pythone это несколько строк без «стандартного» мусора если надо именно класс, или вообще можно использовать tuple/dict.
2) Java не очень хорошо подходит для эффективной работы со строками. Да, там есть все аналоги того что можно сделать в python, но делается это все не так просто и элегантно.
И да, забыл сказать, инженер который писал эту программу точно знает python, т.к. в проекте есть много python скриптов многие из которых писал он, но Java была выбрана (по моим ощущениям, может я ошибаюсь), из-за того что ресурсы используются в Java приложении (Android), и он возможно просто тупо не знал как из питона их записать в файл чтобы из Java потом прочитать.
Думаю, на go получилось бы сопоставимо по объёму, но быстрее по скорости…
В данном случае даже смысла нет делать какое-то профилирование, т.к. различия в скорости не заметны «невооруженным взглядом», а модель использования такова (редкий запуск, для подготовки данных), что выигрыш даже в несколько секунд никого не волнует.
Но могут быть случаи когда даже при значительном ухудшении производительности (но опять-же в разумных приделах), но если при этом например код удобнее использовать (например, не надо JVM) и/или удобнее сопровождать, то это может быть оправдано.
Если вам мешает отсуствие статической типизации в языке, то вы не тот класс задач этим языком решаете.
Когда мне нужно быстро налабать говноскрипт или напрототипировать что-то, в гробу я видал статическую типизацию, столько гемора из ничего.
JS/PHP откровенное говно. Но говно потому что делались левой пяткой на коленке, с кучей косяков by design.

Когда мне нужно быстро налабать говноскрипт или напрототипировать что-то, в гробу я видал статическую типизацию, столько гемора из ничего.
Статическая типизация хороша хотя бы тем, что позволяет выловить ошибки типов еще на этапе компиляции. Ну и да, даже говноскрипты можно писать на Haskell, мне вот недавно поведали сие тайное знание.
Ну и да, даже говноскрипты можно писать на Haskell, мне вот недавно поведали сие тайное знание.Можно и на Go, кстати. У Android билд-система с python на Go переезжает.
xxx: Народ! Какая ОС лучше: Windows 8 или Linux Mint 14?from bash.{org|im}
yyy: Что лучше, ложка или вилка?
zzz: Вилка, ей суп интересней есть.
Антоним динамической типизации — статическая. А строгой — слабая. Python динамический, но строгий. JavaScript динамический и слабый. C — статический, но слабый. C# — в целом статический и сильный.
Мой личный опыт позволяет мне с вами согласится. И даже скажу больше — обычно люди пишут на нескольких языках "на одном языке".
Очень хорошо видны Рубисты в Питоне, Питонисты в Руби, Джависты в СиШарпе и ПХПшники в любом другом языке. Видны любители функциональщины, любители стак-оверфлоу, Гошники и Сишники.
В настоящее время я кручусь в основном в Эликсирах кругах, и отличить пришедшего из Руби от пришедшего из Эрланга могу с 10 строк.
Совершенно очевидно, что выбранный стиль будет хорошо ложиться только на один язык.
Но стиль это еще пол разговора. Вторая половина — это экосистема языка. Новые библиотеки и решения появляются каждый день. Если ты полгода не писал на языке — ты безнадежно отстал. На слабенького мидла оценить можно. Потому что твои знания о том как сейчас пишут, на каких технологиях и т.д. устарели на полгода (а еще ты все забыл). Вышла новая версия фреймворка. Поменялся шаблонизатор или ОРМ. Умерли библиотеки по крипте, а оставшиеся сменили API. И ты будешь хуже того, кто все это знает.
Новые библиотеки и решения появляются каждый день. Если ты полгода не писал на языке — ты безнадежно отстал. На слабенького мидла оценить можно. Потому что твои знания о том как сейчас пишут, на каких технологиях и т.д. устарели на полгода (а еще ты все забыл). Вышла новая версия фреймворка. Поменялся шаблонизатор или ОРМ. Умерли библиотеки по крипте, а оставшиеся сменили API
А что фреймворк в больших проектах меняют каждые полгода?!
И сеньор, который не меняет постоянно библиотеки и фреймворки на новомодные уже и не сеньор?!
Типа «пох на дедлайн! лучше время на миграцию на очередной фреймворк потратить, чем на доведение до релиза! заниматься исправлением багов — это для лохов!»?!
1) А долго ли, или первая неделя покроет 95% всех действительно важных для разработки знаний?
2) А какой процент фреймворка знают наизусть те кто на нем писали все эти пол года?
Очевидно, что в среде где все меняется каждые пол года настолько, что любой спец становится максимум слабым миддлом, как пишущий на языке постоянно так и пропустивший пол года из гугла не будут вылезать оба. Ведь изменение в любом конкретном аспекте могли произойти хоть вчера, а значит твои знания в любом конкретном аспекте нужно проверять на актуальность прямо сейчас. И завтра тоже. И послезавтра. А то вдруг фреймворк обновился.
Когда конкретная задача считается месяцами и более, и пишется 1 раз а потом просто работает то 5% на 1000 серверов это минус 50 серверов. Которые можно не покупать, если оценка скорости выполнена заранее, например на небольшой выборке на паре серверов, или пойти под другие задачи. Или просто — их выключить и как ЗИП использовать + экономия энергии + меньше работы всяких инженеров, если такая предусмотрена. Ну или задачу можно посчитать на эти 5% быстрее.
Неактуально для систем, которые постоянно меняются.
Я так понимаю, вы знаете все языки и тулсеты?
Я конечно понимаю, что сейчас стало нормой быть Senior Js и считать себя профи, а после изучения TypeScript вообще запускать ЧСВ в небеса. Но только это не значит, что Senior Js это какойто хайквалифаед разраб или вообще сеньер. Это обычный формошлеп, только с модной лычкой.
Просто общий уровень разрабов настолько просел, что выбор языка под задачу, огромное количество людей считают за фантастику! Просто вдумайтесь в это.
То есть я сначала должен как-то выбрать под задачу язык и тулсет, а только потом изучать? Толково.
Кстати, а что вы делаете, когда к вам через неделю приходят и слегка изменяют задачу так, что ваш язык перестал подходить?
То есть я сначала должен как-то выбрать под задачу язык и тулсет, а только потом изучать? Толково.Нужно иметь широкий кругозор и большой опыт, или изучать предметную область и возможные решения перед решением задачи. Если первого нет, а со вторым проблемы, идите учитесь.
Кстати, а что вы делаете, когда к вам через неделю приходят и слегка изменяют задачу так, что ваш язык перестал подходить?Задача меняется слегка, а язык перестал подходить полностью. С логикой проблемес? В любом случае решения принимаются изходя из разумных пределов.
Этого то хоть жопой ешь!
> В любом случае решения принимаются изходя из разумных пределов.
изходя из разумных пределов принимаются какие решения? Переписать на другом тулките с нуля? Дописывать вторую половину задачи на другом языке? Решать задачу не на том языке, на котором надо?
> Задача меняется слегка, а язык перестал подходить полностью.
Ну как «полностью»… я на любом тьюринг-полном языке могу задачу решить. Но вы же про какие-то другие критерии выбора языка под задачу?
Этого то хоть жопой ешь!Если бы это было правдой, этого спора бы не было
изходя из разумных пределов принимаются какие решения? Переписать на другом тулките с нуля? Дописывать вторую половину задачи на другом языке? Решать задачу не на том языке, на котором надо?Во всех трех кейсах вы вышли за границу разумного
Ну как «полностью»… я на любом тьюринг-полном языке могу задачу решить. Но вы же про какие-то другие критерии выбора языка под задачу?Напишите на 1С рендер 3D-движка под Android, и чтобы не меньше 60 fps
Ну то есть опыта большой заказной разработки у вас нет?
Только не надо отвечать «жопой ешь», надо отвечать на «Кстати, а что вы делаете, когда к вам через неделю приходят и слегка изменяют задачу так, что ваш язык перестал подходить?». Ну, если есть что.
> Напишите на 1С рендер 3D-движка под Android, и чтобы не меньше 60 fps
Оплачивать на карточку удобно?
Лучше приведите конкретный кейс
Оплачивать на карточку удобно?Оплата по факту выполнения
Вышеописанное не претендует на истинность и не отражает моего мнения, я постарался взглянуть на ситуацию со стороны бизнеса.
Мы же не считаем и не называем гастарбайтеров, высококвалифицированными уважаемыми инженерами? Почему тогда должны считать формошлепов синьерами? :)
не считаем и не называем гастарбайтеров, высококвалифицированными уважаемыми инженерами
Но и третьесортными макаками мы их не считаем. А разнорабочие у вас, получается, неуважаемые?
А с каких пор «синьер» стало употребляться вне конкретного стека технологий, и начало обозначать сферического спеца во всем? Даже если человек знает один только 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. Но тоже близко. Там тоже результат будет похож.
А вот качественное освоение нового языка — занимает кучу времени и сил. При таком раскладе брать людей и заставлять их переучиваться — попросту невыгодно.
Чтобы язык было было полезно выбрать под задачу (а не под навыки имеющихся в компании или на рынки людей) — он должен быть сильно другим. Как Форт или Хаскель. Но тут вопрос переучивания — вообще становится катастрофическим.
Если бы оно было просто «сложное» vs «простое»! «Укрощение GC» — это совсем другой навык, нежели работа с «умными» указателями. Тот факт, что JVM «прогревается» и может «ненужный» код «растоплять» в многоуровневых иерархиях функций, но при этом метапрограммирование в компайл-тайм отсуствует напрочь, а в райнтайм — очень даже присутствует в рантайм — диктует совсем другие подходы к структуре программ. И так далее.Есть ощущение, что переход с C++ на Java не будет таким разрушительным
Коненчо, тут же наоборот переход от сложного к простому, хотя тоже отпечаток оставляет на некоторое время.
Хорошая программа на C++ может быть близка к хорошей программе на Java по своим эксплуатационным характеристикам — но устроены они должны быть сильно по-разному.
Справедливости ради, пролог это такая вещь в себе, ни на что промышленно используемое не похожая.
Именно потому, что логичесткие построения можно на любом языке изобразить, а вот «Material Design» на про Prolog'е вы замучаетесь делать.
Попытка же совместить Prolog и, скажем, Java, в одном модуле — приведёт к таким пляскам с бубном, что мало не покажется…
И именно поэтому, когда у вас возникнет задача, хорошо ложащаяся на Prolog вы трижды подумаете перед тем, как раскнёте его использовать — так ведь?На самом деле все будет проще — я не буду его использовать. И пожалуй не только потому, что задач хорошо ложащихся на пролог нет (кроме лабораторных по этому самому прологу). А еще потому, что пролог несмотря на смену парадигмы запомнился мне подражанием другим языкам, что привело к переусложнению языка.
Именно потому, что логичесткие построения можно на любом языке изобразить, а вот «Material Design» на про Prolog'е вы замучаетесь делать.
Попытка же совместить Prolog и, скажем, Java, в одном модуле — приведёт к таким пляскам с бубном, что мало не покажется…В действительности если бы пролог оставлася узкоспециализированной, но хорошо интегрируемой и относительно простой вещью, я бы его использовал. (В современном мире у него была бы ниша как у ассемблера.) А так получается, что создатели пролога работая с детским конструктором решили что кубы лучше окружностей, а потом полезли с этим в автомобилестроение.
И он прав, если задачу проще и дешевле сделать на Haskell, надо делать на Haskell.
А потом возникает необходимость программу доработать, а он уже ушел в другое место. А ближайший человек знающих хаскель запрашивает немалые деньги, и то его найти удалось через пол года только.
Не забывайте что мы в т.ч. решаем задачу бизнеса, а ему важно в т.ч. насколько просто найти специалиста, насколько быстро другой специалист может что то поправить, есть ли отличия в деплое, настройке и поддержке среды (или у вас этим тоже программист будет постоянно заниматься?).
Как программист лично я с вами согласен, но если смотреть здраво — такой подход принесет проблемы. Это уж не говоря о том что всегда есть тонкие нюансы в технологии, используемых библиотеках и подобном, на которые специалисты в этой технологии уже наступали и сразу могут обойти. И уж точно нужно помнить что какой бы кругозор ни был — время на вспоминание/обновление/изучение знаний по технологии нужно, а время это деньги и сроки.
"Сегодня вы пишите бекенд, завтра приложение под андроид, а послезавтра вам нужно будет кусок кода на плюсах через NDK переписать, потому что джава тормозит, и все, ваши руки связаны, для вас это оверскилл.
…
А если нужен клиент для iOS? А если web-клиент? А если нужен простой скрипт для работы с файлами? А если игра? "
Как можно такую чушь писать?
Язык — это не только синтаксис, но и знание всех инструментов в его инфраструктуре.
Но смешивать вообще разные задачи для программирования — это полная чушь! Вот уже точно не будет один человек писать и игры, и десктоп, и мобильные приложения, и клиент, и фронт. Вот такое впечатление, что это Вы наслушались кого-то, кто на самом деле ничего не пишет, а только блоги на Ютубе ведёт!
Даже в веб фул стек скорее всего или недостаточно бек, или недостаточно фронт. (На днях смотрел код, как больше Беки видят компонентный подход в интерфейсах и это что-то!)
И вообще, человек изучает программирование, чтобы работать, и поэтому, если он нормально знает Java, то у него не будет проблем с работой ещё минимум лет 10 (если Oracle своими лицензиями его раньше не убьет).
Тоже самое касается почти любого из основных современных языков, но Java на первом месте на данный момент и уже много лет.
Знание ещё одного языка не даст человеку в плюс к зарплате ни копейки, в отличии от более глубокого знания своего основного языка и его инструментов.
P.S. А кто сказал, что я на Java пишу и знаю один язык? Я ради интереса много чего смотрел в рамках веба, но при этом я понимаю, что это или выбор того, что нравится мне под мои задачи, или просто для общего развития, просто потому, что мне интересно.
Я понимаю, что факту это только позволяет более обосновано участвовать в холиворах и не повышает мою ценность как специалиста.
Это не к многогранности личного опыта, а к тому, что реально бывают очень разные люди и ситуации (встречал комбинации и поинтереснее), и категорично заявлять, что никто не будет делать то и то и такого не бывает — не стоит.
На собеседовании таких любителей прыгать по верхам вычислить несложно: они назовут вам много баззворд-слов, но на вопрос рассказать подробно про плюсы и минусы той или иной технологии толком ответить не могут.
Если человек постоянно меняет языки, это значит, что он не хочет работать, а хочет учиться за счет работодателя или набить побольше слов в свое резюме за счет работодателя. Он не хочет выдавать результат.
В вашем примере «человек» плохой не потому, что он меняет языки, а потому, что он не выдает результат. А из первого, необязательно, следует второе.
на вопрос рассказать подробно про плюсы и минусы той или иной технологии толком ответить не могут
А как можно рассказать про плюсы и минусы той или иной технологии(причем подробно), не зная той или иной технологии?
Ммм дайте-ка вспомнить, когда же мне представлялась возможность выбрать язык для проекта… Никогда :)Вот здесь, я думаю, вы кривите душой. Обычно выбор есть — но он ограничен налисными ресурсами. В основном специалистами. То есть если вы будете делать приблуду под Android — вы сможете выбирать где тот или иной компонент будет «жить» — в Java-мире, или в C++-мире (потому что и то и другое у вас в проекте, скорее всего, уже есть), но вот засунуть туда ещё и C# — это нужны будут ну ооооччччеееннь веские причины…
но вот засунуть туда ещё и C# — это нужны будут ну ооооччччеееннь веские причины…
Скорее наоборот. Причины засунуть C# в Андроид-приложение вполне себе будничные — вы хотите получить мультиплатформенный софт, и вам для этого понравился Xamarin. А вот причины писать под Андроид на NDK с C++ часто сводятся к «мне было любопытно» :)
Но предыдущий комментатор, ИМХО, имел в виду другое — что бОльшая часть программистов в мире всё-таки не системные архитекторы и не руководители, и не принимают решения о выборе платформы и языка. Что начальство сказало, то и взяли.
Э… Языки уже после третьего учатся легко. И вообще язык — ерунда, сколько там занимает описание языка? Вот фреймворк новый изучить — может понадобиться время, просто потому, что много всего учить. Так что — составлять рейтинг по фреймворкам, а не по языкам? (в случае macos/ios — довольно логично, сложно ли переучиться с objc на swift, когда все api одинаковые?)
И вообще язык — ерунда, сколько там занимает описание языка?Официальный стандарт C++17 — почти полторы тысячи страниц. И это очень сухое описание, без вводных глав и наглядных примеров.
В любом случае, куда больше времени занимает освоение идиоматичного написания на этом языке, лучших практик, набор опыта.Дык в этом и дело! Если вы «изучите» какой-нибудь C++ и начнёте писать на нём так, как писали на Java — ни к чему хорошему это не приведёт. Вы получите хрень, которая объединит недостатки обоих языков, скорее всего.
Потому что у C++ — совсем другие идиому и всё совсем по другому реализуется. Хотя бы потому что вместо интерфейсов и наслежлования тут шаблоны и концепты (наследование, впрочем, тоже есть — но из-за того, что в C++ так и не прижились синатуры его роль сильно более ограничена, чем в Java). А в Haskell — у вас алгебраические типы, монады и всё, что вокруг них.
И если вы будете присать программу на Haskell так же, как вы бы писали её на C++ (а никак иначе человек без опыта не сможет её написать) по указанию «гениального» архитектора — то ничего, кроме проблем, вы не получите…
// На плюсах никогда не писал
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 вообще нет его прямого эквивалента, потому что специализация дженериков не предусмотрена. И это только одно отличие в одном аспекте одной концепции. А всего их всех многие сотни.
Вот, к примеру, пример прямо из документации:
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);
}
Потому и шансами воспользоваться нестандартными «ускоренными» типами нужно пользоваться очень аккуратно и осторожно.
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 посмотреть, может там чего изменилось…
Реальное расхождение проявляется тогда, когда шаблон начинает делать со своим параметром что-то отличное от «принял-передал-скастовал». Например, обращаться к статическим членам.
В шаблонах с типом-параметром можно работать произвольным образом: обращаться к его статическим членам, вложенным типам, можно вызывать любые методы. Каждый экземпляр шаблона компилируется отдельно. И вообще шаблоны в 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
… но оно будет работать не всегда. Именно поэтому реальные компиляторы имеют кучку расширений, которые и позволяют реализовать стандартную библиотеку.То, о чём я говорил: основной объём информации для изучения — не язык, а библиотеки и фреймворки.Библиотеки и фреймворки — это второй этап, в некотором смысле. Третий — это уже понимание идиом языка. И вот на это могут уйти месяцы, а то и годы (в зависимости от языка).
Другой рациональной причины быть не может. При выборе языка в работе и карьере популярность бестолковый параметр. Надо смотреть на поддерживаемость, коммьюнити, применимость к конкретной задаче, востребованность на рынке и т. д.
Это, конечно, несколько связано с популярностью, но вышеперечисленные параметры проще получить из статистики, и более полезны.
Ну и как развитие трендов, язык может косвенно свидетельствовать о росте какого-то направления (ну как например, Python в машинном обучении, анализе данных и т.п.).
1с в России очень распространен но мало популярен
Малопопулярен он на хабре, а не в России. Я бы даже сказал «не моден».
Просто часто 1С-программист это не вьюноша пылкий со взором горящим, а солидный такой дядечка, который хорошо умеет в бухгалтерию и бухгалтерш и освоил простейший бейсик для автоматизации формочек.
В каждой сфере может быть свой рейтинг.
Где-то нужно меньше программировать и много думать, а где-то бывает совсем наоборот.
И под каждую задачу нужно выбирать наиболее подходящий язык а не наиболее популярный, где популярность — это всего лишь один из критериев для выбора.
Исходный вопрос был, зачем учить популярный язык. Ответ очевиден: ради работы.
P.S. Или это был такой тонкий намек, что Java всё? Ну когда-нибудь да, будет всё, а пока популярно и работу даёт.
В северной америке все расчеты по моделированию экологических движух исключительно на фортране. Устройтесь куда нибудь в Schlumberger's Water Services Technology Group
Вот еще аналогичная: www.weblakes.com
Во-вторых, «догнать» авангард в новых и популярных технологиях гораздо проще. Или что вы предлагаете учить новичку — эзотерические технологии без вменяемой документации и сообщества, или же древние языки, в которых у конкурентов могут быть десятки лет опыта?
В-третьих, наличие работы у фортранщиков сейчас не дает никаких гарантий на год, два, пять вперед. Рано или поздно в любой компании с древним стеком технологий случится одно из двух — она захочет модернизироваться или закроется. И тогда найти новую работу будет крайне проблематично.
Я не вполне разделяю тот курс, по которому движутся современные IT-тренды, однако вынужден признать, что держаться более-менее в голове состава выгодно как для работников, так и для работодателей.
Не знаю, кому проще догнать авангард. Моё видение на основе собственного опыта — это бесполезное и безнадёжное занятие, т.к. когда догонишь, авангард как-то резко кончается и становится никому не нужен. Классика же почему-то остаётся стабильно востребованной.
Ничего не даёт никаких гарантий. И про 'любой' и 'или-или' — любые обобщения неверны. Есть очень разные компании с очень разными занятиями.
Например, кому сейчас нужна «просто Java»? Большинство вакансий — это создание приложений под Android, поэтому те скиллы, которые нарабатывались Java-кодерами в Java ME и прочих древностях, могут быть смело выкинуты ими в мусорную корзину.
Точно так же никого не интересует «просто PHP», всем нужно знание конкретной CMS, которые к сожалению устаревают. И точно так же играешь в лотерею, пытаясь угадать, на что же тратить время, чтобы быть в тренде.
И .NET Framework сам по себе уже никому не нужен, всем нужен Unity. Все навыки, полученные при создании WPF под винду, можно забыть, они больше никогда не понадобятся.
Это вброс или вы серьёзно? Куча энтерпрайза плотно сидит на .NETе, так же как и на Java.
Насчёт востребованности классики… Она ведь востребована не сама по себе, а благодаря своей способности встраиваться во что-то другое, «авангардное».
Может потому что «авангардное» под капотом работает на «классике»?
Например, кому сейчас нужна «просто Java»?
Когда было то славное время, когда не требовались какие-либо нишевые библиотеки?
Платформы умирают, а универсальные языки находят себе применение.
Метрика гитхаба — по количеству пулл-реквестов — очень сильно сломана. Лидерство JS понятно просто потому, что современный JS это куча мелких пакетов с учебным говнокодом, который обречён ломаться везде и всегда. То MS/Apple выкатит новый браузер с новыми багами, то node — очередной ежемесячный ломающий совместимость релиз. Вот и фиксят.
Про метрики гуглёжки я даже не хочу говорить, они сломаны ещё больше.
dou.ua/lenta/articles/salary-report-june-july-2018
На Тостере 95% вопросов дошкольного уровня. Ну Вы и критерий нашли!
Разные области программирования имеют разный вес. Думаю что для веба написано намного больше кода чем для встраиваемых систем. Сравнивать нужно взаимозаменяемые языки. Для системного программирования один рейтинг, для веб-программирования другой.
Не думаю, что в обозримом будущем куда-то денутся основные языки, хотя вакансии просматривать нужно.
Почему-то в комментариях много смеются над 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 — это Query Language.
Хотя, в списке есть другие декларативные языки программирования — функциональные.
Причём, 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# vs Java on Linux
Web Framework Benchmarks
Имхо, сравнивая темпы развития C# и Java, через пару лет C# станет лидером в энтерпрайз секторе.
вы, как минимум, забываете про проблемы обратной совместимости. (вы смешиваете «развитие» и «изменчивость»?). код, написанный 3-5-7 лет назад должен собираться и работать на новых компиляторах точно так же, как и 3-5-7 лет назад на старых компиляторах.
а этого в шарпах, увы, не происходит. по крайней мере как я вижу. только недальновидный будет вкладываться в большие долгоживущие системы на шарпах в таких условиях.
ну и стандартизация с описанием эталонной модели работы языка там тоже не очень то дотягивает до уровня, что бы обеспечить процесс аналогичный сертификации сторонних реализаций джава-машины.
пока эталонный компилятор создает только майкрософт, шарпы будут жить только там, где его двигает майкрософт, а на всех и вся их банально не хватит.
но для не очень больших короткоживущих приложух, с малоизменяющимися требованиями, простыми процессами внутри, отсутствием «бизнес-процессов» и проблем с этим связанных, отсутствием проблем долгой поддержки и постоянного развития — шарпы самое то. и геймдев на юнити — тому прямое доказательство.
Что касается .Net как такового — .Net Core — это действительно лучшее, что произошло за последние лет 10. Это опен сорс ссылка и кросплатформенно, а производительность уже выше вылизанной Java, при этом с каждым релизом она растет.
Так что ваши взгляды на Майкрософт отстали лет на 5
ну я вам про козлов, а вы мне про баранов. я не говорил про опенсорсность компилятора ну вот совершенно ничего.
Я смотрю на описание проекта… на майнтейнера… и вспоминаю вышенаписанное мною про то, что
пока эталонный компилятор создает только майкрософт,……
Вы знаете — вот у руби тоже компилятор опенсортный. Только «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, как делаю часто, и как часто делает большинство из тех профессиональных программистов, которых я знаю
А зачем он это делает часто?
Иначе я никак не смогу объяснить 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?
Странно все это!
Что за ерунда происходит с рейтингами популярности языков программирования?