![](https://habrastorage.org/getpro/habr/post_images/564/eb6/1b6/564eb61b677a267ea35885efe7c811b5.jpg)
Я сегодня изучал индекс TIOBE, как делаю часто, и как часто делает большинство из тех профессиональных программистов, которых я знаю. Он претендует на измерение популярности языков программирования в мире, а его график изменения популярности со временем рассказывает простую историю: Java и C с незапамятных времён остаются королями языков с большим отрывом.
Но, погодите-ка, давайте не так быстро. Конкурирующий список PYPL Index (PopularitY of Programming Languages) говорит, что королями являются Python и Java, а C (учитываемый, внезапно, совместно с C++) находится где-то в глубине списка. Что происходит?
Просто у двух этих списков очень разные методологии подсчётов. Однако их объединяет одно – спорность их методологий, если учитывать, что их целью является измерение популярности языков программирования. TIOBE измеряет просто количество запросов в поисковике. PYPL измеряет, как часто люди гуглят обучающие материалы по тому или иному языку.
Обе эти меры плохие. Можно ожидать, что доступность онлайн-ресурсов будет очень отстающим индикатором. У популярного когда-то языка, теперь преданного забвению, должны остаться миллионы старых веб-страниц, посвящённых ему, полумёртвых сайтов и записей в блоги, которые никто не читал годами. А поиски обучающих материалов должны склоняться к тем языкам, которым обучают студентов. Эта мера не имеет отношения к тому, какие языки реально часто используются профессионалами-практиками.
В числах этих рейтингов есть множество аномалий. Если верить TIOBE, в прошлый раз C взлетел от самого низкого места в рейтинге до языка года за пять месяцев. Я могу поверить, что С возрождается за счёт встраиваемых систем. Но я так же легко могу представить, что этот взлёт произошёл за счёт недостатков далеко не идеального метода измерения.
Более вопиющая аномалия в обеих рейтингах – относительная эффективность Objective-C и Swift, двух языков, на которых пишут нативные приложения для iOS. Я могу поверить, что в сумме они испытывают некоторый упадок перед лицом популярности таких кросс-платформенных альтернатив, как Xamarin и React Native. Но я с трудом верю в то, что после четырёх лет раскрутки Swift компанией Apple – с моей точки зрения, языка куда как более лучшего — Objective-C остаётся более популярным и широко используемым. Я на работе сталкиваюсь с разными приложениями для iOS/tvOS/watchOS, и беседую со множеством разработчиков для iOS. Очень редко удаётся найти человека, который до сих пор не перешёл с Objective-C на Swift.
Однако истории из жизни данных не заменят, правда? Если бы с этими методологиями конфликтовал только мой личный опыт, я бы заключил, что он просто подпорчен ошибкой отбора. И я бы спокойно это сделал, если бы только не существовало другой методики измерения популярности языков программирования. Я говорю о ежегодных отчётах GitHub, где указываются пятнадцать наиболее популярных языков программирования, используемых на этой платформе. И эти числа идеально совпадают с моим опытом, и серьёзно расходятся с заявлениями TIOBE и PYPL.
Согласно отчётам GitHub от 2016 и 2017 годов, наиболее популярный язык программирования в мире, причём с большим отрывом, это Javascript. На втором месте идёт Python, на третьем Java, а на четвёртом Ruby. Это резко контрастирует с TIOBE, где указываются Java и C, а потом, с большим отрывом, Python и C++ (Javascript вообще на восьмом месте). И с PYPL, заявляющим о таком порядке: Python и Java, большой отрыв, потом Javascript и PHP.
Очевидно, что числа GitHub не отображают всю профессиональную область на 100%. Их выборка очень крупная, но касается только проектов с открытым кодом. Однако хочу отметить, что GitHub – единственный рейтинг, где Swift оказывается более популярным, чем Objective-C. Из-за этого он выглядит гораздо убедительнее. Однако его выборка, основанная на открытом коде, делает его не определяющим.
Эта статистика на самом деле имеет значение, а не просто удовлетворяет любопытство и предоставляет некую информацию об индустрии. Язык – это ещё не всё, но он всё-таки имеет значение. Люди определяют, какие языки им изучать, какую работу искать и чем заниматься, на основании их популярности и их относительной ценности в будущем. Поэтому немного неприятно, что три этих методики измерения так сильно, так радикально отличаются. К сожалению, нам, судя по всему, придётся довольствоваться гаданием на чайных листьях вместо чётких цифр.
Stalker_RED
Для начала неплохо бы уточнить определения. Что такое популярные, и чем они отличаются от распространенных или разрекламированных? Можно ли считать популярным язык, который никому не нравится, но о нем приходится иногда гуглить, потому что его внедрила в свои продукты БольшаяКорпорация™?
artskep
Логика подсказывает, что тот, на котором больше людей пишут код.
Но вот как это посчитать без переписи программистов — решительно непонятно.
Djeux
Если делать перепись, то не удивлюсь что на первое место выйдет PHP благодаря категории «пару раз перед сном дома CMS написал по мануалу». Относить ли такую категорию к программистам дело вторичное.
avraam_linkoln
Я думаю PHP выйдет на второе место, если искать по вакансиям)
artskep
Первая моя мысль после прочтения статьи была «че же не померить по вакансиям». Но, увы, это тоже ошибка выборки — на разных технологиях может быть разная текучка кадров. В суровом энтерпрайзе Джавы трудится куча народа, но из-за того, что это суровый энтерпрайз, количество открытых вакансий может не отражать количество реально трудоустроенных (и, как результат, пишуших) на Джаве.
Вобщем, только перепись. Причем не добровольная, а принудительная (ибо фанаты новых языков могут устроить хайп, а труженик того же энтерпрайза забьет на любой опрос, ибо семью кормить надо, а не фигней страдать). А это, очевидно, утопия.
Source
Надо в следующую перепись населения включить вопрос: "На каких ЯП Вы программируете?" xD
NetBUG
И «Сколько раз в неделю» =)
sumanai
Можно без дополнительного вопроса, писать в графу "Религия".
Source
Не, для этой графы надо оставить табы vs пробелы.
Cryvage
Так надо чтобы человек не только указал языки, на которых он когда-то писал, но и в каком объёме, в каком году последний раз, и насколько активно/профессионально он занимается разработкой. Можно ещё указывать отрасль: web frontend, web backend, enterprise, open source, embedded, mobile и т.д. И конкретный фреймворк. Страну тоже было бы неплохо, т.к. рынок в разных странах может сильно различаться. Отдельно ещё можно указать, какие языки изучал в ВУЗе, и в каком году, чтобы знать насколько обучение релевантно рынку, и как ситуация меняется. Вот тогда статистика будет не только интересной, но и полезной. Сразу будет понятно на чём фокусироваться, если хочешь попасть в определённую отрасль. Частично такие корреляции и так очевидны и общеизвестны, вроде javascript/frontend или java/enterprise. Но всё же хочется больше подробностей. Например, какой процент C++ программистов используют, скажем Qt. Использует ли современный enterprise в значимых количествах, например, Python или Go. Какое количество Java программистов экспериментирует с Kotlin, и сколько перешло на него в реальных проектах. И т.д. В общем много всего интересного можно было бы увидеть.
Skerrigan
Чисто в рамках примера ответа по перечисленному перечню вопросов:
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 (могу во «фрагменты», могу в «активити»).
Работаю практически каждый день, локально/удаленно — без разницы.
Учился на радиофизическом, в программирование пришел из поваров. РФ.
Free_ze
Обучение популярным языкам программирования — это не задача вуза, поэтому отразит лишь популярность некоторых языков среди преподавательского состава.
Arranticus
Есть неплохая выборка от StackOverflow:
romashko_o
Выборка потерялась куда-то.
YemSalat
Брр, напомнило как я загран паспорт менял…
3aicheg
Не логичнее ли, тогда уж, считать по совокупному числу юзеров всех написанных на том или ином языке программных продуктов? Тоже, правда, непонятно, как считать, да и метрику нужно продумать более основательно — иначе каждый балл за Джаваскрипт, например, будет стабильно давать баллов по десять за C++ какой-нибудь (ну, там, на чём написан браузер, ОС, веб-сервер, серверная ОС, вот это вот всё). Зато отсеются все эти «пару раз перед сном CMS по мануалу».
Habra_nik
Может лучше посмотреть, за что больше платят? Или на каком языке можно писать в течении нвиболее продолжительного промежутка времени, не переучиваясь (тут си победит с большим отрывом).
Бльше людей пишут код — в средней школе все писали на бейсике так-то, не показатель.
MacIn
Пишут или произведено кода вообще когда-либо? Во втором случае — чем более старый язык, тем больше на нем кода и больше людей им пользовались (в среднем, при прочих равных). В первом — за какой период учитывается написание кода?
greabock
Думаю, что питон даже не топ 3. 4й или 5й должен быть.
P.S.
А еще, у меня нет ни одного знакомого, который бы умел в руби, ни то чтобы прям писал на нем.
DaneSoul
(Про Python) По использованию в коммерческой разработке — вполне вероятно Вы правы. А вот как язык которым хоть как-то владеют — я думаю он сейчас будет одним из первых, так как очень многие современные программы обучения (Coursera, Udacity, Stepic и т.д) начинают именно с него.
greabock
Ну вот голосование, на текущий момент, показывает, что питон-то «о-го-го»… видимо, я (и еще два человека) неправильно думаю )
tmin10
С моей точки зрения, сейчас любят начинать учить с JS.
Небольшой личный опыт: мой друг-медик скачал какое-то обучающее программированию приложение и там был именно JS как язык, на основе которого объясняют основы.
sentyaev
Популярность еще очень зависит от страны и даже города. Где-то Python рулит, где-то Java. А смотреть в среднем по больнице смысла нет.
Тут скорее важно количество вакансий в том регионе где ищешь работу.
queses
В последнее время популярность языков программирования определяю очень просто — беру популярную площадку с вакансиями (для нас 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
bulavin
цифры на upwork будут значительно отличаться и php там топ1 с большим отрывом :)
peresada
Возьмите выборку по Китаю, и там PHP разорвет все другие языки. Возьмите выборку по России, и тут как-то все более сбалансировано. Возьмите выборку по Индии — тоже удивитесь.
JekaMas
Вы про java забыли в Китае.
Весь стэк Али*** — это java
paratagas
Я тоже так делаю, но заметил, что такой подход обычно имеет определенную долю искажения выборки из-за того, что некоторые языки указываются, как дополнительные. Скажем, вы вводите в поиске «Python» и получаете часть вакансий для специалистов C++ или Java, где Python указан, как дополнительный навык. То есть вывод получается такой: если знаете C++ или Java (и Python), хорошо, приходите, но если не знаете C++ или Java (но знаете Python), вы нам не подходите. То же верно и для JavaScript, например. Он часто указывается как доп. навык на большое количество позиций, где основной профиль — другой язык. Еще интересна судьба SQL по выборкам на вакансии. Много где указывается «MySQL», «PostgreSQL» и т.д. Мы понимаем, что любая из этих СУБД подразумевает знание SQL, но малое употребление в вакансиях именно «SQL» формально снижают позицию этого языка в умозрительном рейтинге. Особенно, если поиск на сайте с вакансиями заточен под точное соответствие вводимому запросу.
kuftachev
Python и Ruby популярны в Пиндостане, при этом в Европе PHP в разы больше.
P.S. У меня есть две знакомых, которые писали на Ruby, один пока был в Пиндосии, второй дома в Украине.
P.P.S. Java — study once work everywhere!
MamontsevDS
Стесняюсь спросить, а Пиндостан — это где? Можете на карте показать?
unabl4
Что там показывать-то? США это. Руби ещё более-менее как-то «жив» в США. Питон популярен везде более-менее равномерно.
mapron
Мне кажется, комментатор выше знает это. Намек был просто на принятый нейтральный стиль общения на Хабре.
JC_IIB
Зато «пиндостан» — отличное слово-индикатор. Такое же отличное, как, например, «хомячки».
kuftachev
По вакансиям в Европе я бы так не сказал. Тут PHP зависит от страны, но обычно минимум в раза два больше, чем Python.
Krypt
Я никогда не писал на Ruby, но, тем не менее, гитхаб считает, что у меня есть несколько проектов на нём. На самом же деле это служебные репозитории пакетного менеджера.
KEugene
По честному, Питон будет лидером с очень большим отрывом, если вспомнить, что его используют в своей работе далеко не только программисты.
sintech
Я не совсем программист. Объясните пожалуйста зачем состоявшимся разработчикам изучать колебания популярности тех или иных языков программирования? Какие выводы они сделают про изменениях? Перепишут весь код на другом языке?
Djeux
Могут принять решение перейти на другой язык, чтобы в будущем потенциально не остаться без работы или решить расширить круг потенциальных рабочих мест.
ilitaexperta
Djeux
В идеальном мире да. В неидеальном есть компании, а у компании продукты, и никто не будет тратить лишние деньги на поддержку новой инфраструктуры из-за того что язык А быстрее языка Б на 5% в конкретной задаче.
Я вот как-то не встречал еще в своей жизни спецов, которые абсолютно одинаково (с точки зрения качества кода) могут писать на нескольких языках.
ilitaexperta
В таком случае идеальный мир от нашего отличается, только тем, что в идеальном вещи своими словами называют.
Значит вы вообще не встречали спецов.
Неудивительно.
Вы что ситх? Ведь только они все возводят в абсолют
Djeux
Бог ты мой, как только я осмелился на тему ИТ говорить со спецами на «тру» языках, все ухожу ухожу.
Am0ralist
ilitaexperta
А в чем я не прав? Если человек находится на том профессиональном уровне, на котором изучение новых языков\технологий представляет для него проблему, то он обладает низкой квалификацией. Вы будете с этим спорить?
![](https://habrastorage.org/webt/7c/w3/lq/7cw3lqgvegj0trylsdujc8zd09g.png)
Ну да, многим обидно осознавать себя на этом уровне. Ведь мы курсы по фронтенду закончили, на первую работу устроились, мы теперь востребованные сверхлюди! А он нас макаками назвал! С этим я не могу ничего поделать.
peresada
Изучить другой язык, если хватает квалификации, не трудно. НО, попробуйте объяснить бизнесу, что:
— Вам нужно время, чтобы адаптироваться к языку (синтаксис, ключевые методы-операторы-функции, специфики)
— Вам нужно время, чтобы вникнуть в предметную область
— Вам нужно время
Или иначе, попробуйте объяснить семье, что вам нужно 2-3 месяца по вечерам, чтобы перейти на новый язык, поэтому вы будете снимать квартиру и жить отдельно это время.
В лёт перейти с одного языка на другого в ущерб материальным ценностям, карьере и т.д. могут только студенты, у которых пока еще нет ответственности и обязанностей.
Sklott
Аргументы у вас очень странные. Нормальному специалисту нужно 2-3 дня, а не месяца чтобы разобраться в новом языке и уметь написать простейшие вещи. Остальное приходит с опытом по мере работы.
Neikist
Ммм… А для написания простейших вещей точно нужен специалист? Я в целом придерживаюсь мнения что завязываться на одной технологии неправильно и нормальный специалист должен быть способен на уровне мидла подходы, библиотеки, технологии и т.п. освоить новые за пару-тройку месяцев, но то что можно освоить за пару недель — разве что в простых вещах применить можно будет.
peresada
Разве речь идет о простейших вещах? Не помню источник, но в одной статье говорилось, что программист работает на треть менее эффективно на новом языке программирования. Я и имел ввиду следующее, что для бизнеса задержка релиза на условный месяц чаще всего будет критичней, чем увеличение производительности на 5% или простоты поддержки на 10%.
amelekhin
Приглашаю вас за 2-3 дня разобраться в Rust или OCaml.
potan
Ну я на OCaml примерно столько и потратил.
Правда, я уже знал Haskell…
0xd34df00d
В Idris.
a_e_tsvetkov
Да не вопрос.
Семантика владения в Rust далеко не рокет сайенс.
И я уже знаю хаскел, так что не предвижу проблемы с камлаом, даже объектным.
По мне так любой программист должен владеть хотя-бы одним функциональным языком, а зная один освоить другой не сложно.
cyberly
А если там другая парадигма? Скажем с ООП перейти на функциональное программирование? А с императивного на декларативное? И вообще, можно 2-3 дня потратить только на то, чтобы незнакомый стек заставить работать на своей машине. А еще незнакомые фреймворки, незнакомые инструменты разработки… Я допускаю, что Hello World по мануалу на чем угодно делается достаточно быстро, но это не «разобраться».
Mine
Как парадигма может быть «другой» для специалиста? Если ты не можешь мыслить в разных парадигмах, то ты, как утверждали выше, — макака.
IvanNochnoy
«Специалист подобен флюсу, полнота его одностороння»
Козьма Прутков
Mine
Ты сказать-то что хотел?
IvanNochnoy
Sapienti sat
bopoh13
Стандартный вопрос: сколько лет и на каких языках вы пишите?
Sklott
Хм… Ну ладно.
~30 лет.
Языки в примерном порядке их изучения:
8080 assembler
Basic
C
8086 assembler
Pascal
C++
Prolog
ARM assembler
Java
Perl
Ruby
Python
Не изучал «глубоко», но вполне понимаю и способен поправить программы на PHP и Javascript.
Может что еще забыл…
Понятно что сейчас я пользуюсь в основном актуальными языками, для меня это:
C/C++
Java
Python
Иногда Ruby, но только для своих собственных проектов
potan
Из неимперативных присутствует Prolog, но это достаточно экзотический в наше время язык. Какой у Вас опыт его использования?
С++ — есть опыт серьезного использования boost? Все остальное достаточно слабо работает с типами, переход на язык, в котором типы данных играют более существенную роль будет вызывать затруднение.
Что бы утверждать, что теперь совсем любой язык будет учиться за 2-3 дня надо попробовать освоить Idris, Mercury и Rust. Или сразу ATS.
splav_asv
2-3 всё же это слегка недобор. 2-3 дня это только синтаксис + некоторое понимание как и что идиоматично пишется. Реально всё же надо хотябы неделю. 2-3 дня поиграться, пару дней почитать исходники приличных проектов, и 1-2 практики — руку набить.
P.S. Субъективно: после Haskell и Rust — читать код с Boost слегка… неприятно, наверное. ИМХО Haskell вполне достаточно для представления о приличной системе типов.
0xd34df00d
Только она там неприличная. Хотя с чем сравнивать, конечно.
JC_IIB
Мы помним, что в некоторых языках вполне себе выполняется выражение 1+'1'-1, давая на выходе 10.
p.s. про «попробуйте за 2-3 дня разобраться в Idris» — это зачет :)
Sklott
С Prolog-ом история такая: учил в институте, понравилось, поигрался, понял что в реальной жизни практически не применимо, бросил.
Т.е. я успел достаточно с ним поиграться чтобы понять, что чтобы на декларативном языке сделать что-то реально полезное, в него зачем-то напихали кучу костылей чтобы превратить его в императивный. На мой взгляд, если «вдруг пролог взлетит» на тех-же квантовых компьютерах, на нём стоит писать только ядро задачи, а всю обвязку на чём-то другом.
Так получилось что с boost-ом я практически не знаком, т.к. в момент его расцвета ушел с головой в Java-у, а вернулся уже на С++11/14 где смысла приплетать boost насколько я понимаю практически нет (возможно для каких-то задач он и сейчас актуален, я не знаю, в наших проектах его нигде нет).
Честно говоря все эти слова " Idris, Mercury и Rust. Или сразу ATS.", кроме Rust-а мне ничего не говорят, так что время тратить не хочется, но если там нету кардинальной смены парадигмы (типа как в функциональных языках), то всё еще не вижу почему их нельзя изучить, ну пусть не за 2-3 дня, но за неделю две, как меня тут поправляют.
DelphiCowboy
Если и взлетит, то Fussy Prolog с нечёткой логикой.
А классический Prolog ограничен в практическом применении из-за его строго бинарной логики.
potan
Idris и ATS — языки с «зависимыми типами», концепцией, которую понять не просто.
В Mercury есть линейные типы, на которых сделан ввод/вывод (что позволило не тащить в логический язык много императивщены).
Меcто Prolog сейчас начинают заменять системы удовлетворения ограничений и SMT-солверы. Тоже, кстати, нетривиальная тема.
0xd34df00d
Концепция завтипов предельно проста, её правильно и идиоматично применять непросто.
0xd34df00d
Ну, в C++11, 14 и 17 буст нужен, например, для mpl/fusion/hana, или для всяких более прикладных вещей вроде boost.graph или там multiindex какой-нибудь.
0xd34df00d
Почему «сразу ATS»? Он же проще. Есть императивность, завтипы ограничены ЕМНИП.
bopoh13
Большой опыт! Перепишите конструкцию c Python на Ruby:
Или вот, на Lisp-е научитесь писать этот код за 3 дня?0xd34df00d
Научитесь генерировать этот список через рекурсивные схемы за 24 часа.
Sklott
А чего тут сложного-то в Ruby?
Да, там нет list comprehension, но можно все тоже самое сделать стандартными функциями и/или лямбдами.
Конкретно для этого выражения эквивалент:
Насчет Lisp-а, честно говоря я в него глубоко не вникал, но на поверхностный взгляд я не вижу чем он принципиально отличается от динамических языков программирования (тех-же Python, Ruby), но при этом имеет соврешено человеко- нечитаемый синтаксис. Т.е. я понимаю, что это был практически первый язык программирования и его синтаксис в первую очередь обусловлен простотой парсинга, а не простотой для понимания человеком. Но работать на таком сейчас…
Возможно есть какие-то современные IDE, которые делают эту кашу читаемой, могу ошибаться но насколько я в курсе для Lisp даже нормального бесплатного компилятора нет, не говоря про IDE. Поэтому в ту сторону даже смотреть не собираюсь. Опять-же на мой взгляд вся сложность программирования на Lisp — это «превозмогание» его синтаксиса, а не какие-то концептуальные вещи…
bopoh13
Вопросов нет! Вы точно за 2-3 дня сможете начать писать на новом языке.
0xd34df00d, благодарю, но я ещё не дорос.
splav_asv
GNU CLisp — не подойдёт на роль компилятора?
Sklott
Подойдет конечно, был не в курсе, как я уже писал в сторону Lisp-а, я не особенно смотрел. Просто использовал относительно недавно программку написанную на Lisp-е в описании которой говорилось, что компилиться она только коммерческими компиляторами.
rjhdby
Бытует такое мнение, что для поддержания себя в форме разработчику хорошо бы учить по одному новому ЯП в год. Не в том смысле конечно, что все бросать и становиться гуру, а просто заложить базу. Скорее всего ему никогда не придется профессионально на них писать, но, если вдруг, то перестроиться будет в разы легче.
DrPass
А если он уже находится на том уровне, когда изучение каких-то новых языков/технологий банально не представляет для него интереса? Зачем тратить время на очередную свистоперделку, изучать её, если можно за это время продвинуть свои проекты на известной платформе, или там позаниматься любимым хобби. А свистоперделка все равно через год-два выйдет из моды, и на её место три других придет.
Sklott
Ну продолжайте забивать гвозди микроскопами, кто вам мешает.
Приведу пример из реальной жизни:
У нас в проекте одним китайским товарищем была написана программка для генерации ресурсов в необходимом формате, по сути конвертер, на Java. Программка была замечательно написана с точки зрения ООП, такая развесистая клюква на 10+ классов и несколько тысяч строк кода.
Я заменил всю эту лабуду простенькой программкой на python в 200 строк кода, которая стала гораздо проще в понимании и дальнейшей поддержке.
DrPass
У вас же пример не забивания гвоздей микроскопами, а обычного оверинжиниринга. Я в жизни не поверю, что на Java нельзя было уложиться в сопоставимый с пайтоном объем кода (пусть не столько же, ну в полтора раза больше, а не в десять-двадцать раз). При желании, естественно.
А в остальном, я действительно многократно убеждался, что менять фреймворки/платформы для своих проектов — неважнецкая идея. Годится только в том случае, если выбранный изначально был корявым и/или нестабильным. В остальном затраты на изучение/перенос/адаптацию к фичам практически никогда не окупаются. Поэтому можно смело пропускать все обновления, и только когда приходишь в новый проект, разбираться с тем фреймворком/платформой, которые актуальны для него и в текущий момент времени.
Sklott
Тут наполовину проблема была не в оверинжиниренге как таковом, а в паре концептуальных вещей:
1) Чтобы в Java работать с набором данных нужно как минимум завести класс (можно конечно не заводить, но это только все ухудшит), и зачастую добавлять в него какие-то «стандартные» вещи (copy constructor, equals, и т.п), а в pythone это несколько строк без «стандартного» мусора если надо именно класс, или вообще можно использовать tuple/dict.
2) Java не очень хорошо подходит для эффективной работы со строками. Да, там есть все аналоги того что можно сделать в python, но делается это все не так просто и элегантно.
И да, забыл сказать, инженер который писал эту программу точно знает python, т.к. в проекте есть много python скриптов многие из которых писал он, но Java была выбрана (по моим ощущениям, может я ошибаюсь), из-за того что ресурсы используются в Java приложении (Android), и он возможно просто тупо не знал как из питона их записать в файл чтобы из Java потом прочитать.
playnet
А что со скоростью выполнения работы? С одной стороны java довольно любит ресурсы, с другой — питон интерпретируемый и без С вставок и/или какого PyPy работает он не особо быстро.
Думаю, на go получилось бы сопоставимо по объёму, но быстрее по скорости…
Sklott
Ну не всегда, даже возможно чаще не, скорость работы (если она кончено меняется в разумных пределах, а то есть знаете ли примеры...) программ является решающим фактором.
В данном случае даже смысла нет делать какое-то профилирование, т.к. различия в скорости не заметны «невооруженным взглядом», а модель использования такова (редкий запуск, для подготовки данных), что выигрыш даже в несколько секунд никого не волнует.
Но могут быть случаи когда даже при значительном ухудшении производительности (но опять-же в разумных приделах), но если при этом например код удобнее использовать (например, не надо JVM) и/или удобнее сопровождать, то это может быть оправдано.
zzzmmtt
Да и язык, на котором данный специалист пишет, вполне себе может развиваться, соответственно поднимать свою квалификацию можно в узкой области. Ну и попутно можно изучать смежные технологии. Тот же PHP взять, язык растёт, меняется, есть куда расти и разработчикам, попутно можно (а зачастую необходимо) изучать SQL (как сам язык, так и особенности его реализации в различных СУБД), NoSQL, системы кеширования, AMQP, да много чего ещё. И внезапно, знает разработчик 1 язык, квалификация у него высокая, но он макака. Илитни эксперты видимо умеют и на фортране с коболом, и на си с плюсами, и на руби с пайтоном одинаково хорошо писать, у них есть время на изучение новых языков, а в перерывах между всем этим они развлекаются написанием программ на брэйнфаке, а во сне (они вообще спать то успевают?) — им видится чистый байткод.
0xd34df00d
Изучать другой язык — не проблема. Я как-то освоил идрис, у меня в планах полноценно освоить агду (что должно быть легко) и coq (что будет чуть менее легко), и потом пойти упарываться в сторону совсем маргинальщины вроде какого-нибудь zombie, что уже граничит с достаточно теоретическими исследованиями (если посмотреть, зачем этот zombie создавался, например).
А вот какой-нибудь питон я патологически не воспринимаю и писать на нём не могу и не буду.
JC_IIB
Чистое любопытство — а в чем корень нелюбви к питону, что с ним, по-вашему, не так?
Sklott
Ну вот я например предпочитаю Ruby чисто из-за синтаксиса, честно говоря идея сделать форматирование текста программы частью его синтаксиса кажется мне немного «странной».
0xd34df00d
Отсутствие статической типизации с ним не так (ну и просто куча возможностей сделать что-нибудь неявное, от всяких декораторов до магических
__get__
или как их там).Я, в принципе, одинаково не люблю почти все языки без статической типизации, просто мнение о том, что PHP или JS прям супер языки, встречается куда реже. Говорили бы так про тот же PHP, я бы его в пример приводил.
ilitaexperta
Почему динамическая типизация это плохо? И почему статическая лучше? Это как ложка и вилка.
Если вам мешает отсуствие статической типизации в языке, то вы не тот класс задач этим языком решаете.
Когда мне нужно быстро налабать говноскрипт или напрототипировать что-то, в гробу я видал статическую типизацию, столько гемора из ничего.
JS/PHP откровенное говно. Но говно потому что делались левой пяткой на коленке, с кучей косяков by design.
JC_IIB
Удержаться было просто невозможно. Искренне прошу не принимать написанное на картинке на личный счет, это просто гэг.
khim
0xd34df00d
Речь про квазиквотеры для шелла и про stack'овский шебанг.
ilitaexperta
Ложка хороша хотябы тем, что когда ешь суп, жидкость не вытекает между зубчиками
Free_ze
0xd34df00d
Динамическая плоха тем, что семантические ошибки в вашем коде выявляются внезапно динамически.
Ну, тот класс задач, который удобно решать без статической типизации, я решаю на шелле. У меня так
~/backup.sh
написан, например, там просто последовательность вызововrsync
.А вот дойдут руки у меня почистить музыкальную коллекцию от пустых папочек, в которых есть только
cover.jpg
иcover.bmp
, я это на шелле писать не буду. И на питоне не буду.Virviil
Мой личный опыт позволяет мне с вами согласится. И даже скажу больше — обычно люди пишут на нескольких языках "на одном языке".
Очень хорошо видны Рубисты в Питоне, Питонисты в Руби, Джависты в СиШарпе и ПХПшники в любом другом языке. Видны любители функциональщины, любители стак-оверфлоу, Гошники и Сишники.
В настоящее время я кручусь в основном в Эликсирах кругах, и отличить пришедшего из Руби от пришедшего из Эрланга могу с 10 строк.
Совершенно очевидно, что выбранный стиль будет хорошо ложиться только на один язык.
Но стиль это еще пол разговора. Вторая половина — это экосистема языка. Новые библиотеки и решения появляются каждый день. Если ты полгода не писал на языке — ты безнадежно отстал. На слабенького мидла оценить можно. Потому что твои знания о том как сейчас пишут, на каких технологиях и т.д. устарели на полгода (а еще ты все забыл). Вышла новая версия фреймворка. Поменялся шаблонизатор или ОРМ. Умерли библиотеки по крипте, а оставшиеся сменили API. И ты будешь хуже того, кто все это знает.
DelphiCowboy
А что фреймворк в больших проектах меняют каждые полгода?!
И сеньор, который не меняет постоянно библиотеки и фреймворки на новомодные уже и не сеньор?!
Типа «пох на дедлайн! лучше время на миграцию на очередной фреймворк потратить, чем на доведение до релиза! заниматься исправлением багов — это для лохов!»?!
MacIn
Угу, я вот смотрю на свое место работы, где основной продукт — на Delphi, миллионы строк кода и ведет свою родословную из ЕМНИП 1983 года. И прямо вижу, как мы раз в квартал меняем фреймворки и платформы…
sentyaev
1. Линтеры.
2. Code review. Но на самом деле каждый проект имеет свой уникальный стиль, и сложнее привыкнуть к этому стилю, чем и стилю языка.
Если говорить об основных библиотеках и фреймворках вроде web фрейворка, ORM, то практически нет разницы для какого он языка. Основные концепции одинаковые, ключевые слова одинаковые. Разница чисто косметическая.
Про всякую мелочевку — а зачем тут что-то изучать, открыли доку и веред. Все равно нужно будет ее адаптировать под проект.
playermet
> И ты будешь хуже того, кто все это знает.
1) А долго ли, или первая неделя покроет 95% всех действительно важных для разработки знаний?
2) А какой процент фреймворка знают наизусть те кто на нем писали все эти пол года?
Очевидно, что в среде где все меняется каждые пол года настолько, что любой спец становится максимум слабым миддлом, как пишущий на языке постоянно так и пропустивший пол года из гугла не будут вылезать оба. Ведь изменение в любом конкретном аспекте могли произойти хоть вчера, а значит твои знания в любом конкретном аспекте нужно проверять на актуальность прямо сейчас. И завтра тоже. И послезавтра. А то вдруг фреймворк обновился.
playnet
> икто не будет тратить лишние деньги на поддержку новой инфраструктуры из-за того что язык А быстрее языка Б на 5% в конкретной задаче.
Когда конкретная задача считается месяцами и более, и пишется 1 раз а потом просто работает то 5% на 1000 серверов это минус 50 серверов. Которые можно не покупать, если оценка скорости выполнена заранее, например на небольшой выборке на паре серверов, или пойти под другие задачи. Или просто — их выключить и как ЗИП использовать + экономия энергии + меньше работы всяких инженеров, если такая предусмотрена. Ну или задачу можно посчитать на эти 5% быстрее.
Неактуально для систем, которые постоянно меняются.
areht
> Нормальный разработчик выбирает язык и тулсет под задачу
Я так понимаю, вы знаете все языки и тулсеты?
ilitaexperta
Я так понимаю, вы не можете разобраться с новым языком\тулсетом за разумное время?
Я конечно понимаю, что сейчас стало нормой быть Senior Js и считать себя профи, а после изучения TypeScript вообще запускать ЧСВ в небеса. Но только это не значит, что Senior Js это какойто хайквалифаед разраб или вообще сеньер. Это обычный формошлеп, только с модной лычкой.
Просто общий уровень разрабов настолько просел, что выбор языка под задачу, огромное количество людей считают за фантастику! Просто вдумайтесь в это.
areht
> Я так понимаю, вы не можете разобраться с новым языком\тулсетом за разумное время?
То есть я сначала должен как-то выбрать под задачу язык и тулсет, а только потом изучать? Толково.
Кстати, а что вы делаете, когда к вам через неделю приходят и слегка изменяют задачу так, что ваш язык перестал подходить?
ilitaexperta
Задача меняется слегка, а язык перестал подходить полностью. С логикой проблемес? В любом случае решения принимаются изходя из разумных пределов.
areht
> Нужно иметь широкий кругозор и большой опыт
Этого то хоть жопой ешь!
> В любом случае решения принимаются изходя из разумных пределов.
изходя из разумных пределов принимаются какие решения? Переписать на другом тулките с нуля? Дописывать вторую половину задачи на другом языке? Решать задачу не на том языке, на котором надо?
> Задача меняется слегка, а язык перестал подходить полностью.
Ну как «полностью»… я на любом тьюринг-полном языке могу задачу решить. Но вы же про какие-то другие критерии выбора языка под задачу?
ilitaexperta
Вы ударились в демагогию, вместо аргументов.
Если бы это было правдой, этого спора бы не былоВо всех трех кейсах вы вышли за границу разумного
Напишите на 1С рендер 3D-движка под Android, и чтобы не меньше 60 fps
areht
> Во всех трех кейсах вы вышли за границу разумного
Ну то есть опыта большой заказной разработки у вас нет?
Только не надо отвечать «жопой ешь», надо отвечать на «Кстати, а что вы делаете, когда к вам через неделю приходят и слегка изменяют задачу так, что ваш язык перестал подходить?». Ну, если есть что.
> Напишите на 1С рендер 3D-движка под Android, и чтобы не меньше 60 fps
Оплачивать на карточку удобно?
ilitaexperta
Зависит от конкретной задачи, сроков и оплаты. И того, что значит перестал подходить в вашем понимании
Оплата по факту выполненияЛучше приведите конкретный кейс
areht
По обоим пунктам видно, что фрилансер. Это многое объясняет.
Задача — неконкретная, срок — вчера, оплата -почасовая.
PashaNedved
Гипотетически, я тот самый «формошлёп», пришедший в индустрию зарабатывать деньги. Зачем мне изучать другие языки, если я знаю js? Если js не подходит для каких-то задач, значит надо его адаптировать под эти задачи :) Проще добавить халявный ffi и уменьшить размер v8, чем обучить армию «формошлепов».
Вышеописанное не претендует на истинность и не отражает моего мнения, я постарался взглянуть на ситуацию со стороны бизнеса.
ilitaexperta
А где я сказал что формошлепу надо обязтельно изучать другие языки? Если его устраивает формошлепить и получать свои n денег, пусть работает так и не развивается. Только по существу он будет третьесортной макакой.
Мы же не считаем и не называем гастарбайтеров, высококвалифицированными уважаемыми инженерами? Почему тогда должны считать формошлепов синьерами? :)
Vilaine
Но и третьесортными макаками мы их не считаем. А разнорабочие у вас, получается, неуважаемые?
playermet
> Почему тогда должны считать формошлепов синьерами?
А с каких пор «синьер» стало употребляться вне конкретного стека технологий, и начало обозначать сферического спеца во всем? Даже если человек знает один только BASIC шестидесятых, но при этом пишет на нем в разы качественней и быстрее подавляющего большинства других программистов, то это по определению значит что он Senior BASIC Developer.
Mine
Да с самого начала так употреблялось. Это потом уже макаки так расплодились, что сеньоров стало не найти. Вот и стали всякое говно сеньорами называть.
khim
Первый «большой» раскол на три лагеря — это Кобол vs Фортран vs Лисп. Условно «бухгалтера», «математики», «искусственный интеллект». С тех пор — разделение усугубилось и попытка объединить физиков и лириков, в общем, провалилась. «Не взлетело».
И вот уже 60 лет нет в природе сеньоров, готовых писать на чём угодно — да и не нужны они.
А то, что вы тут рассказываете — это обычная спесь: давайте запишем всех кто работает в другой области (ну там 1С-программисты или математики со своим MathLab'ом) в «ненастоящие» программисты — и будем упиваться собственной крутизной.
0xd34df00d
Только фортран — это скорее про физиков, а не про математиков. Подставлять числа в плюс-минус-умножить-поделить математикам в среднем давно не очень интересно.
tmin10
Повыбирали язык под задачу, написали каждый микросервис на своём языке, со своими подходами, а потом это код поддерживать никто не сможет, сапорт просто откажется что-то там фиксить.
Free_ze
Не язык нужно выбирать, а платформу.
Наглядно это видно по .NET, где безраздельно доминирует C#, хотя платформа задумывалась именно с прицелом на многоязычность.
YemSalat
Нифига, просто сейчас задачи обычно требуют более углубленных знаний определенных технологий/фрэймворков/платформ и т.д. И задачи надо решать срочно, а не ждать пока разработчики будут переучиваться и наступать на грабли.
kuftachev
Я понимаю, что периодически люди меняют язык под проект, но вообще это очень тупое утверждение про макак. Чем больше языков человек знает, тем он хуже знает свой основной.
Конечно если у человека основной какой-то Ruby, то у него и выхода нет, а если человек пишет на Java, то зачем ему знать что-то ещё?
Конечно для общего развития полезно просматривать соседние технологии, но в общем...
Как раз сегодня было два разговора.
Один собеседник (синьор Java, правда из-за денег выучил Древний Эльфийкский — Perl) возмущался, что человек, которого называют архитектором, на Java сравнивает строки через ==. Вот я как раз и говорил, что человек просто знает много языков и получает кашу в голове.
А второй (архитектор, знает много языков, но строки сравнивает правильно), говорил, что если задачу лучше писать на Haskell, то нужно выбирать его, но мои возражения были в том, что на Java точно можно решить почти все, кроме системных задач, и точно можно найти адекватных специалистов, которые сделают это, а вот на Haskell можно что-то решать, если есть готовая команда в офисе и идеи, где ещё брать людей при случае.
Так что, нечего людей называть макаками.
Вот больше проблема, что я вот часто встречаю, что люди не представляют как работает компьютер.
ilitaexperta
Людей я макаками и не называю
Когда я был в относительно юном возрасте, я тоже удивлялся как руководитель команды на наших курсах по Java не знает, что в ней нету дефолтных аргументов методов. Только спустя время, я понял насколько это мелко и неважно. Этот архитектор, над незнанием костылей джавы которого вы смеетесь, сделает любоую вашу задачу проще и быстрее чем вы. А вам, чтобы делать и понимать на должном уровне его задачи потребуются годы практики.Не нужно знать много языков, нужно знать основные концепции. Все языки делятся на большие группы, внутри которых отличия между ними минимальны, а если для вас не минимальны, значит минимальны ваши знания в IT. Ваш архитектор на голову вас выше профессионально. И он прав, если задачу проще и дешевле сделать на Haskell, надо делать на Haskell. Другое дело что таких задач исчезающе мало.
Ой, да, серьезно?.. Написать качественное приложение для iOS, клиентскую часть сайта, любые задачи связанные с перфомансом(рендер, геймдев, реалтайм вещи), красивый и нетормозной десктопный софт нетребующий отдельно тащить vm, быструю систему сборки или интерпретируемый скрипт на джаве написать вменяемо не получится. То что получится, будет выглядеть как забивание винтов молотком, так же осмысленно и качественно. Джава хорошо решает ограниченный круг задач, еще часть задач решает плохо и криво, а часть задач не решает вообще.
Этот перл можно в рамочку на стену вешать. Вы же заперты внутри своей JVM-клетки, в которую сами себя посадили. Сегодня вы пишите бекенд, завтра приложение под андроид, а послезавтра вам нужно будет кусок кода на плюсах через NDK переписать, потому что джава тормозит, и все, ваши руки связаны, для вас это оверскилл. Но это оверскилл только для второсортных разработчиков.
А если нужен клиент для iOS? А если web-клиент? А если нужен простой скрипт для работы с файлами? А если игра? Вы ограничены, как пятиклассник, который говорит «зачем мне эта математика в жизни нужна?»
Зачем знать что-то еще? Да просто чтобы иметь возможность писать что-то кроме тормозного и энтерпрайзного говна.
Вы как строитель, который молотком умеет пользоваться, а отверткой нет. Это смешно. А то, что вы этого не понимаете, это страшно.
И вы еще обижаетесь, что я называю таких как вы, макаками? Я вас умоляю, вам просто правда колет глаза
khim
А знаете ли вы хотя бы что такое call/cc? Зачем исользуется оператор отсечения в прологе? Как устроена система типов в Хаскеле? Или как реализовать новые конструкции языка в Форте? А ведь это всё — центральные вещи, вокруг которых всё построено в этих языках! И без их знания вы будете всего лишь «писать программу на ФОРТРАНЕ используя любой язык»…
На самом деле как раз задач, которые проще и дешевле сделать на Haskell — очень и очень много. Не используют его из-за высокого порога вхождения, а так же из-за того, что люди, изучившие Haskell за пару недель будут его использовать, в лучшем случае, как плохой C++, плохую Java или плохой PHP.
Скорее он ограничен как токарь, который для литья болванки скорее обратится к литейщику, чем будет пытаться изучить как правильно формы из песка делать.
ilitaexperta
Ну вообще то это и значит что делать на Haskell дороже
Между токарем и литейщиком намного больше разницы, чем между программистами пишушими на разных языках, зачастую отличающихся синтаксисом и набором фреймворков
khim
Да, но его дороговизна проистекает не из каких-то его врождённых недостатков, а просто из того, что на рынке C++ программистов (хорошо изучить который не проще, чем Haskell) больше.
Ошибаетесь. У нас в проекте на C++ как-то был бывший Java-программист, довольно продуктивный, в принципе. Однако последствия года его работы пришлось расхлёбывать почти три года, так как всё, что он делал, было заточено под Java. У которой, как известно, JIT. Который может инлайнить функции на лету, когда видит, что какие-то из них часто вызываются. А в C++ — так не работает! Там статический компилятор! Он должен всё во время компиляции видеть, иначе ничего оптимизировать невозможно!
В результате пришлось вначале извести тот «задел на будущее», который он оставил — а потом реализовать всё то, подо что он «оставил задел» правильно — так, как это на C++ делается. Некоторые компоненты в 10 ускорились!
P.S. Есть ощущение, что переход с C++ на Java не будет таким разрушительным, так как «подход C++» в Java в принципе нереализуем. Но проверок на практике я не делал, так что категорично утверждать не буду.
ilitaexperta
Так это языки так слабо отличаются, или разработчики так сильно? Вы противоположные вещи пытатесь доказть
Коненчо, тут же наоборот переход от сложного к простому, хотя тоже отпечаток оставляет на некоторое время.
khim
Это не «противоположные вещи», а две «шкалы измерения». Если объективно оценивать результат — то кардинального отличия продукта, написанного хорошими программистами на C# от продукта написанными хорошими программистами на Java не будет. Немножко в другой нише — PHP/Python/Ruby. Но тоже близко. Там тоже результат будет похож.
А вот качественное освоение нового языка — занимает кучу времени и сил. При таком раскладе брать людей и заставлять их переучиваться — попросту невыгодно.
Чтобы язык было было полезно выбрать под задачу (а не под навыки имеющихся в компании или на рынки людей) — он должен быть сильно другим. Как Форт или Хаскель. Но тут вопрос переучивания — вообще становится катастрофическим.
Если бы оно было просто «сложное» vs «простое»! «Укрощение GC» — это совсем другой навык, нежели работа с «умными» указателями. Тот факт, что JVM «прогревается» и может «ненужный» код «растоплять» в многоуровневых иерархиях функций, но при этом метапрограммирование в компайл-тайм отсуствует напрочь, а в райнтайм — очень даже присутствует в рантайм — диктует совсем другие подходы к структуре программ. И так далее.
Хорошая программа на C++ может быть близка к хорошей программе на Java по своим эксплуатационным характеристикам — но устроены они должны быть сильно по-разному.
0xd34df00d
С такой логикой — не дороже, чем на плюсах, например. Даже, наверное, дешевле, учитывая, что современные плюсы хорошо освоить сложнее, а код на них менее выразителен и более опасен.
ledocool
>Зачем исользуется оператор отсечения в прологе?
Справедливости ради, пролог это такая вещь в себе, ни на что промышленно используемое не похожая.
khim
И именно поэтому, когда у вас возникнет задача, хорошо ложащаяся на Prolog вы трижды подумаете перед тем, как раскнёте его использовать — так ведь?
Именно потому, что логичесткие построения можно на любом языке изобразить, а вот «Material Design» на про Prolog'е вы замучаетесь делать.
Попытка же совместить Prolog и, скажем, Java, в одном модуле — приведёт к таким пляскам с бубном, что мало не покажется…
ledocool
В действительности если бы пролог оставлася узкоспециализированной, но хорошо интегрируемой и относительно простой вещью, я бы его использовал. (В современном мире у него была бы ниша как у ассемблера.) А так получается, что создатели пролога работая с детским конструктором решили что кубы лучше окружностей, а потом полезли с этим в автомобилестроение.
Neikist
А потом возникает необходимость программу доработать, а он уже ушел в другое место. А ближайший человек знающих хаскель запрашивает немалые деньги, и то его найти удалось через пол года только.
Не забывайте что мы в т.ч. решаем задачу бизнеса, а ему важно в т.ч. насколько просто найти специалиста, насколько быстро другой специалист может что то поправить, есть ли отличия в деплое, настройке и поддержке среды (или у вас этим тоже программист будет постоянно заниматься?).
Как программист лично я с вами согласен, но если смотреть здраво — такой подход принесет проблемы. Это уж не говоря о том что всегда есть тонкие нюансы в технологии, используемых библиотеках и подобном, на которые специалисты в этой технологии уже наступали и сразу могут обойти. И уж точно нужно помнить что какой бы кругозор ни был — время на вспоминание/обновление/изучение знаний по технологии нужно, а время это деньги и сроки.
ilitaexperta
kuftachev
"Сегодня вы пишите бекенд, завтра приложение под андроид, а послезавтра вам нужно будет кусок кода на плюсах через NDK переписать, потому что джава тормозит, и все, ваши руки связаны, для вас это оверскилл.
…
А если нужен клиент для iOS? А если web-клиент? А если нужен простой скрипт для работы с файлами? А если игра? "
Как можно такую чушь писать?
Язык — это не только синтаксис, но и знание всех инструментов в его инфраструктуре.
Но смешивать вообще разные задачи для программирования — это полная чушь! Вот уже точно не будет один человек писать и игры, и десктоп, и мобильные приложения, и клиент, и фронт. Вот такое впечатление, что это Вы наслушались кого-то, кто на самом деле ничего не пишет, а только блоги на Ютубе ведёт!
Даже в веб фул стек скорее всего или недостаточно бек, или недостаточно фронт. (На днях смотрел код, как больше Беки видят компонентный подход в интерфейсах и это что-то!)
И вообще, человек изучает программирование, чтобы работать, и поэтому, если он нормально знает Java, то у него не будет проблем с работой ещё минимум лет 10 (если Oracle своими лицензиями его раньше не убьет).
Тоже самое касается почти любого из основных современных языков, но Java на первом месте на данный момент и уже много лет.
Знание ещё одного языка не даст человеку в плюс к зарплате ни копейки, в отличии от более глубокого знания своего основного языка и его инструментов.
P.S. А кто сказал, что я на Java пишу и знаю один язык? Я ради интереса много чего смотрел в рамках веба, но при этом я понимаю, что это или выбор того, что нравится мне под мои задачи, или просто для общего развития, просто потому, что мне интересно.
Я понимаю, что факту это только позволяет более обосновано участвовать в холиворах и не повышает мою ценность как специалиста.
shiru8bit
Писал и игры, и десктоп, и мобильные приложения, и вообще чего только не писал. И в разное время, и одновременно. Программирование определённо изучал не для того, чтобы работать. Языки изучал когда была необходимость, на достаточном для решения задач уровне.
Это не к многогранности личного опыта, а к тому, что реально бывают очень разные люди и ситуации (встречал комбинации и поинтереснее), и категорично заявлять, что никто не будет делать то и то и такого не бывает — не стоит.
0xd34df00d
Ух, мощно.
Я ничего не знаю о геймдеве на плюсах и почти ничего не знаю об эмбеддщине на плюсах (ну, это лишний повод сказать, что я не знаю плюсы).
Я ничего не знаю о веб-фреймворках на хаскеле, например. Почти ничего не знаю, как там стучаться к БД.
Блин, я никаких языков не знаю :(
Не, вы потом, конечно, про это пишете, но я тогда не очень понимаю, что такое все инструменты.
Sabubu
Если человек постоянно меняет языки, это значит, что он не хочет работать, а хочет учиться за счет работодателя или набить побольше слов в свое резюме за счет работодателя. Он не хочет выдавать результат.
На собеседовании таких любителей прыгать по верхам вычислить несложно: они назовут вам много баззворд-слов, но на вопрос рассказать подробно про плюсы и минусы той или иной технологии толком ответить не могут.
Murat1992
В вашем примере «человек» плохой не потому, что он меняет языки, а потому, что он не выдает результат. А из первого, необязательно, следует второе.
А как можно рассказать про плюсы и минусы той или иной технологии(причем подробно), не зная той или иной технологии?
Welran
Почему то мне кажется что в 99% случаев язык и тулсет под задачу уже выбран и вас наняли что бы писать именно на этом языке и который вы видимо знаете лучше всего раз устроились на эту работу. Ммм дайте-ка вспомнить, когда же мне представлялась возможность выбрать язык для проекта… Никогда :).
khim
DrPass
Скорее наоборот. Причины засунуть C# в Андроид-приложение вполне себе будничные — вы хотите получить мультиплатформенный софт, и вам для этого понравился Xamarin. А вот причины писать под Андроид на NDK с C++ часто сводятся к «мне было любопытно» :)
Но предыдущий комментатор, ИМХО, имел в виду другое — что бОльшая часть программистов в мире всё-таки не системные архитекторы и не руководители, и не принимают решения о выборе платформы и языка. Что начальство сказало, то и взяли.
0xd34df00d
Я пишу на плюсах и на хаскеле. И так как мне нравятся оба этих языка, я, в том числе, выбираю задачи под языки и не вижу в этом проблем.
aamonster
Э… Языки уже после третьего учатся легко. И вообще язык — ерунда, сколько там занимает описание языка? Вот фреймворк новый изучить — может понадобиться время, просто потому, что много всего учить. Так что — составлять рейтинг по фреймворкам, а не по языкам? (в случае macos/ios — довольно логично, сложно ли переучиться с objc на swift, когда все api одинаковые?)
khim
creker
Это исключение из правил. Рядовой язык вполне быстро осваивается. Да даже плюсы не то чтобы долго будет изучать. В любом случае, куда больше времени занимает освоение идиоматичного написания на этом языке, лучших практик, набор опыта. И тут плюсы вполне релевантны, т.к. освоиться с теми же умными указателями и правильно принимать решение, какой где использовать, это уже посложнее, чем просто научиться новенькие concepts сочинять. И это не говоря уже о конкретный фреймворках.
khim
Потому что у C++ — совсем другие идиому и всё совсем по другому реализуется. Хотя бы потому что вместо интерфейсов и наслежлования тут шаблоны и концепты (наследование, впрочем, тоже есть — но из-за того, что в C++ так и не прижились синатуры его роль сильно более ограничена, чем в Java). А в Haskell — у вас алгебраические типы, монады и всё, что вокруг них.
И если вы будете присать программу на Haskell так же, как вы бы писали её на C++ (а никак иначе человек без опыта не сможет её написать) по указанию «гениального» архитектора — то ничего, кроме проблем, вы не получите…
ExplosiveZ
Похоже на generics из java.
// На плюсах никогда не писал
playermet
Синтаксически дженерики и шаблоны похожи. Но работают они совершенно по разному.
khim
Визуально generics в Java и шаблоны в C++ невероятно похожи. Но в современный Java и современном C++ они разошлись радикально.
Как сделать подобныйВот, к примеру, пример прямо из документации:
std::tuple
generic в Java? И насколько он будет эффективен? А в современном C++ — это нормальный способ возврата нескольких значений из функции…0xd34df00d
Туплы, кстати, поразительно неэффективны с точки зрения времени компиляции (ну там минимум по одной инстанциации на каждый элемент тупла для всех реализаций, которые я знаю). Поэтому, если вы счастливый человек и живёте в мире значений без всяких там ссылок, то вариант с
куда более эффективен, а что и как он делает, очевидно любому, кто игрался с лямбда-исчислением и Church encodings.
get
,tuple_cat
и друзья потом довольно просто выражаются (и тоже довольно приятно с точки зрения времени компиляции).И да, я писал код, где замена туплов на вот это уменьшала время компиляции файла с 20 секунд до 10.
khim
И вот тут вы немедленно упираемся в вопрос: а стоит ли уменьшение времени компиляции изобретения своего диалекта языка? Потому что в реальном мире вы, зачастую, в проекте живёте не один и знать про всё, что там бывает, не можете.
Вот совсем недавно мы в одном маааахоньком модуле упёрлись в то, что forwarding references примеными ко всем C++ типам — но это не значит, что в C++ программе они могут принять все значения!
Догадатесь в чём тут дело?
0xd34df00d
Я не догадался. Но это ничего, потому что в С++ VLA нет. Просто ваш компилятор слишком permissive.
khim
Ну дык эта. В C++ их нет, а в коде они есть. Прелестно, не правда ли?
Потому и шансами воспользоваться нестандартными «ускоренными» типами нужно пользоваться очень аккуратно и осторожно.
P.S. Кстати этот код принимают и clang и gcc, так что если у вас нет Windows, то шанс заметить эту проблему при беглом взгляде — невелик…
0xd34df00d
Вы что, без
-pedantic
собираете?khim
А чем
-pedantic
поможет? Как разрешить обычные designated initializers, которые в сотне мест используются, не разрешая при этом VLA?0xd34df00d
Ну вам же даже по вашей ссылке написали, включить С++20.
А если серьёзно, включение одних расширений языка так, чтобы не включать другие — вопрос опций вашего компилятора.
khim
Неа. По моей ссылке написано, что это часть C++20 — но если посмотреть сюда, то можно увидеть что только GCC8 поддерживает их как часть C++20. Clang их поддерживает (причём очень давно поддерживает, начиная с версии 3.0, выпущенной в 2011м году), но… только в качестве «поддержки фич C99 в C++». И в GCC — они в том же статусе с версии 4.7 по версию 7.
Соответственно как только вы включаете designated initializers — так тут же «забесплатно» получаете и поддержку VLA…
0xd34df00d
Кланг с педантиком даже говорит название опции, дающей предупреждения на VLA (мне просто лень открывать wandbox или тестовый файлик на локальной машине снова, чтобы посмотреть, как именно оно называется).
Чё-т вы как-то серьёзно слишком мою иронию восприняли.
khim
mayorovp
Вот как раз std::tuple не использует никакой хитрой магии, и сделать его в Java довольно просто, с поправкой на ссылочность типа, отсутствие сахара и на ограниченность числа параметров. Кстати, первые две беды в C# преодолели.
Реальное расхождение проявляется тогда, когда шаблон начинает делать со своим параметром что-то отличное от «принял-передал-скастовал». Например, обращаться к статическим членам.
mayorovp
Это разные вещи. В дженериках обобщенный код может работать с типом-параметром только так, как это следует из его ограничений. Условно, если известно что T extends Foo — то переменную типа T можно привести к типу Foo. При этом компилируется дженерик один раз, а дальше в той же Java в рантайме вообще все типы-параметры исчезают.
В шаблонах с типом-параметром можно работать произвольным образом: обращаться к его статическим членам, вложенным типам, можно вызывать любые методы. Каждый экземпляр шаблона компилируется отдельно. И вообще шаблоны в C++ полны по Тьюрингу и образуют функциональный мета-язык.
0xd34df00d
Это ещё подъёмно. А вот семейства типов, функциональные зависимости, GADTs, DataKinds, TypeInType, KindPolymorphism — это уже серьёзно.
lakroft
Так в этом же и состоит изучение языка, разве нет? Или под «изучением» вы имеете в виду «выучил синтаксис и пошел говнокодить»?
aamonster
Уели.
Ну… почти: я тут открыл один из драфтов стандарта и вижу, что описание собственно языка заканчивается на 410 странице, а дальше идёт 935 страниц описания библиотеки.
То, о чём я говорил: основной объём информации для изучения — не язык, а библиотеки и фреймворки.
P.S. Хотя были и у меня языки, которые выпадали из общего ряда и требовали усилий именно на "въехать в язык". Пролог (ну, тут я в студенческие годы читал, но т.к. вживую не попробовал — так и не понимаю его) и Хаскель (функциональщина — полбеды, а ленивость ведёт к тому, что мне даже сложность алгоритма оценить трудно). Это не прыгать по императивным языкам...
playermet
0xd34df00d
Для этого достаточно знать, что они есть.
khim
Как мне это сделать? Буль-буль, дзинь-дзинь… никак.
Аналогичный вопрос для C++: как мне сделать свой аналог is_class? Ответ — тот же: никак.
Правда тут уже веселее: если в Java вы в принципе не сможете сделать ничего, похожего на
java.lang.String
, то в C++ вы вроде как типа можете сделать нечто похожее наis_class
… но оно будет работать не всегда. Именно поэтому реальные компиляторы имеют кучку расширений, которые и позволяют реализовать стандартную библиотеку.Библиотеки и фреймворки — это второй этап, в некотором смысле. Третий — это уже понимание идиом языка. И вот на это могут уйти месяцы, а то и годы (в зависимости от языка).
0xd34df00d
Для подавляющего большинства программистов на плюсах необходимость реализовывать
is_class
примерно такая же, какvariant
.0xd34df00d
Не пугайте людей, описание самого языка (в смысле PLT) там занимает всего страниц четыреста.
artskep
Лично для меня: IT's AWESOME!
Другой рациональной причины быть не может. При выборе языка в работе и карьере популярность бестолковый параметр. Надо смотреть на поддерживаемость, коммьюнити, применимость к конкретной задаче, востребованность на рынке и т. д.
Это, конечно, несколько связано с популярностью, но вышеперечисленные параметры проще получить из статистики, и более полезны.
rekzi
Некоторые программные продукты поддерживают скриптовые расширения и автоматизацию. По популярности можно выбрать, какой язык внедрить (ну как один из критериев).
Ну и как развитие трендов, язык может косвенно свидетельствовать о росте какого-то направления (ну как например, Python в машинном обучении, анализе данных и т.п.).
ra2003
Один из разрезов мониторинга какие еще языки в тренде, какой следующий язык учить/посмотреть.
IvanNochnoy
Популярность языка определяется количеством рабочих мест. TIOBE измеряет неизвесно что.
Neikist
Точно? Как по мне так популярность это то как много разработчиков пользуются + хотели бы пользоваться языком. Например 1с в России очень распространен но мало популярен. PHP вроде в такой же ситуации примерно.
vanxant
Малопопулярен он на хабре, а не в России. Я бы даже сказал «не моден».
Neikist
По моему (мнению и опыту) многие им чисто ради денег занимаются, а по факту предпочли бы что нибудь другое (и бывает по фану и занимаются чем то другим в свободное время).
vanxant
Ну вообще я знаю только один язык с платным рантаймом, на котором в том числе по фану прогают — это Mathematica. И ABAP,
и Swift,и powershell — это работа ради денежки.Neikist
Ну так и мы не популярность ABAP и 1с смотрим, а популярность среди всех языков.
vanxant
Подозреваю, что в этой стране программистов 1С больше, чем программистов на Java, C++ и PHP вместе взятых. У конторы может ещё не быть даже сайта, но начиная с 10-20 сотрудников с вероятностью 90% 1С у неё уже есть, вместе с как минимум приходящим программистом этой 1С. Где-то с 50 человек уже вероятно in house, и не один.
Просто часто 1С-программист это не вьюноша пылкий со взором горящим, а солидный такой дядечка, который хорошо умеет в бухгалтерию и бухгалтерш и освоил простейший бейсик для автоматизации формочек.
Neikist
Есть некие сомнения что этому дядечке хоть какие то ЯП и технологии интересны как таковые.
KonkovVladimir
1C программист это скорее тётечка!
Neikist
Не, если именно нормальный программист — то кто угодно, а если «программист» то как правило парень который катается с обновлениями в случае франча или же показывает какой он сильный программист таская компы. Нисколько не умаляя что такие люди нужны, и возможно как бы не больше чем обычные программисты, но все же именно оттуда, как мне кажется, мифы о «тыжпрограммистах» идут, коих хотелось бы поменьше. Хотя вопрос кого программистом называть сложный.
alsii
Вот-вот… Я тоже подумал, что сначала неплохо бы определиться с терминологией. Например: кто такой программист?
Sabubu
Большинство людей программированием ради денег занимаются, а по факту предпочли бы что-нибудь другое.
Neikist
Ммм… Как мне кажется большинство все же не только ради денег. Ну т.е. если бы не платили совсем — да, немногие бы занимались, а в целом например я заканчивал школу с целью поступить в медицинский или экономический, а программирование планировал изучить по фану и заниматься в свободное время (я тогда даже не предполагал что программистов столько нужно, из деревни оно выглядело так что работу программистом найти разве что в москве можно, и то нужно пара тысяч на всю Россию). Справедливости ради на тот момент у меня и компа то не было (2009), а знания программирования ограничивались qbasic.
kvaps
Мне кажется что не правильно вот так в лоб сравнивать языки программирования.
В каждой сфере может быть свой рейтинг.
Где-то нужно меньше программировать и много думать, а где-то бывает совсем наоборот.
И под каждую задачу нужно выбирать наиболее подходящий язык а не наиболее популярный, где популярность — это всего лишь один из критериев для выбора.
shiru8bit
Популярный язык — значит очень большая конкуренция, на нём уже пишут все, кому не лень. Зачем его учить, да ещё в роли догоняющего, вслед за всеми? Пока что история показывает, что специалисты по устаревшим языкам без работы не сидят, и труд какого-нибудь фортранщика хоть и не широко востребован, но вполне достаточно, и оценивается по достоинству. Ну а владеющие C с плюсами и без вообще без дела не сидят уже полвека. Толку им внезапно перепрыгивать на ужасающе популярную Яву или Питон?
Neikist
Возможно смотрят не начинает ли их любимый язык в топ выбиваться (хотя сами пишут на другом по работе), возможно отслеживают не идет ли текущая их технология к упадку.
DSolodukhin
Ну вот Java один из самых популярных языков, на нем пишут все, кому не лень. Но при этом вакансий много, а разработчиков всё равно не хватает. Мне вот регулярно прилетают предложения о работе, хотя я и не ищу её.
vanxant
«Ну вот Delphi один из самых популярных языков, ещё 10 лет назад на нём хоть когда-нибудь писали все, кому не лень. Но при этом разработчиков много, а вакансий ноль»:)
DSolodukhin
10-15 лет назад Delphi действительно был популярным языком и учили его многие. И работали Delphi-разработчиками, и деньги зарабатывали.
Исходный вопрос был, зачем учить популярный язык. Ответ очевиден: ради работы.
P.S. Или это был такой тонкий намек, что Java всё? Ну когда-нибудь да, будет всё, а пока популярно и работу даёт.
Quarc
Несмотря на то, что Java мне не нравится, я не поверю, что она когда-нибудь вымрет, как и C/C++. Все таки слишком много на них написано и каждый день что-нибудь новое пишется с опорой на уже написанное.
nmrulin
Ну вот народ позабудет, тогда на Дельфи опять моду возродят. И будут ждать, пока народ забудет Яву.
RPG18
Нанимают не за знание языка, а за опыт. Фортран можно выучить, но где набраться достаточного опыта использования этого языка на каких-нибудь мэйнфреймах,
BalinTomsk
--но где набраться достаточного опыта использования этого языка
В северной америке все расчеты по моделированию экологических движух исключительно на фортране. Устройтесь куда нибудь в Schlumberger's Water Services Technology Group
RPG18
Они берут без опыта работы?
BalinTomsk
Конечно опыт нужен, много небольших конторок, где обычно Delphi и надо быть мастером на все руки и зарплаты слегка ниже чем по рынку.
Вот еще аналогичная: www.weblakes.com
RPG18
Зависит от региона. Например в Санкт-Петербурге найти вакансию на Delphi с зарплатой 140k на руки довольно сложно.
impwx
Во-первых, большое количество специалистов не означает высокую конкуренцию. Конкуренция — это отношения числа заказов к числу исполнителей, но популярность языка стимулирует появление новых рабочих мест. Найти вакансию для начинающего веб-разработчика явно проще, чем для начинающего COBOL'иста.
Во-вторых, «догнать» авангард в новых и популярных технологиях гораздо проще. Или что вы предлагаете учить новичку — эзотерические технологии без вменяемой документации и сообщества, или же древние языки, в которых у конкурентов могут быть десятки лет опыта?
В-третьих, наличие работы у фортранщиков сейчас не дает никаких гарантий на год, два, пять вперед. Рано или поздно в любой компании с древним стеком технологий случится одно из двух — она захочет модернизироваться или закроется. И тогда найти новую работу будет крайне проблематично.
Я не вполне разделяю тот курс, по которому движутся современные IT-тренды, однако вынужден признать, что держаться более-менее в голове состава выгодно как для работников, так и для работодателей.
shiru8bit
В статье речь шла не про новичков, а про большинство профессиональных программистов, которых знает автор. Я никому ничего не предлагаю, просто удивляюсь, зачем им, опытным разработчикам, следить за трендами и готовиться перепрофилироваться на каждый чих моды.
Не знаю, кому проще догнать авангард. Моё видение на основе собственного опыта — это бесполезное и безнадёжное занятие, т.к. когда догонишь, авангард как-то резко кончается и становится никому не нужен. Классика же почему-то остаётся стабильно востребованной.
Ничего не даёт никаких гарантий. И про 'любой' и 'или-или' — любые обобщения неверны. Есть очень разные компании с очень разными занятиями.
Alexey2005
Насчёт востребованности классики — тут всё не так просто. Она ведь востребована не сама по себе, а благодаря своей способности встраиваться во что-то другое, «авангардное».
Например, кому сейчас нужна «просто Java»? Большинство вакансий — это создание приложений под Android, поэтому те скиллы, которые нарабатывались Java-кодерами в Java ME и прочих древностях, могут быть смело выкинуты ими в мусорную корзину.
Точно так же никого не интересует «просто PHP», всем нужно знание конкретной CMS, которые к сожалению устаревают. И точно так же играешь в лотерею, пытаясь угадать, на что же тратить время, чтобы быть в тренде.
И .NET Framework сам по себе уже никому не нужен, всем нужен Unity. Все навыки, полученные при создании WPF под винду, можно забыть, они больше никогда не понадобятся.
shiru8bit
MIDP, Android, разные CMS, Unity — это всё платформы. А в статье речь про языки программирования. Понять, зачем профессионалы присматриваются к платформам, можно (как раз описанный вами случай — знает Java, ME кончилась, присмотрелся к Android). Зачем присматриваются к популярности языков в отрыве от всего — менее понятно. Причём в статье это подаётся как атрибут профессионала, вот что коробит. Типа, намёк — не следишь за популярностью языков, значит так себе профессионал.
IvanNochnoy
Навыки, полученные, при написании WPF, понадобятся, если писать кроссплатформенный приложения Xamarin, а так же для UWP, так как они совпадают с WPF на 90%.
usego
>И .NET Framework сам по себе уже никому не нужен, всем нужен Unity
Это вброс или вы серьёзно? Куча энтерпрайза плотно сидит на .NETе, так же как и на Java.
Free_ze
Может потому что «авангардное» под капотом работает на «классике»?
Когда было то славное время, когда не требовались какие-либо нишевые библиотеки?
Платформы умирают, а универсальные языки находят себе применение.
Neusser
Некая практическая польза есть у рейтинга «популярности» языков среди вакансий. А сколько людей на каком языке пишет не особо полезная информация с практической точки зрения. И неважно какой методикой измерять.
DrPass
Количество запросов по тому или иному языку в поисковике коррелирует ведь не только с частотой его использования, но и банально с его сложностью/непонятностью. Поэтому методика оценки популярности по количеству запросов действительно так себе.
aknew
Она много с чем еще коррелирует — с модностью (чем моднее — тем больше новичков которые ищут решение), с понятностью и полностью мануалов (скажем, при использовании матлаба я крайне редко что-то искал в интернете) и наверняка еще чего можно придумать. Еще есть интересный момент, например, запрос «obj-c работа с сокетами» на самом деле будет описывать plain c (CoreFoundation как и еще куча низкоуровневых фреймворков имеют интерфейсы на чистом с), но вот запишется ли такой запрос в зачет C большой вопрос
Alert123
Если судить по стоимости книг, самый популярный JavaScript
paratagas
Вы имеете ввиду самые дорогие или самые дешевые? Если взять топ дорогих IT-книг на русском, то мне попались в основном по алгоритмам, Java и базам данных. JavaScript-книги по цене подешевле будут.
vanxant
Мне кажется, единственно верная метрика — число открытых вакансий. Но она, внезапно, регионо-зависимая.
Метрика гитхаба — по количеству пулл-реквестов — очень сильно сломана. Лидерство JS понятно просто потому, что современный JS это куча мелких пакетов с учебным говнокодом, который обречён ломаться везде и всегда. То MS/Apple выкатит новый браузер с новыми багами, то node — очередной ежемесячный ломающий совместимость релиз. Вот и фиксят.
Про метрики гуглёжки я даже не хочу говорить, они сломаны ещё больше.
svitoglad
Вот последний рейтинг по Украине. Си действительно ближе к концу списка. Хоть С++ еще на 6-м месте держится.
dou.ua/lenta/articles/salary-report-june-july-2018
maslyaev
В голосовалке не хватает пункта «1С»
Lennonenko
и kotlin
artemisia_borealis
и D
wegres
Ерунда все эти рейтинги. Если зайти на Тостер, то по количеству вопросов ( т.е. запросов) лидируют теги Javascript — 50806, PHP — 46875, Python — 13467.
riot26
На количество вопросов как минимум ещё влияют качество документации ЯП и неумение гуглить среднего ЯП-юзера. На большую часть вопросов с тостера отвечают первые 2 ссылки с гугла при правильной постановке.
wegres
Интересная мысль. Документация что у JS, что у Python — хорошая. И что тогда TIOBE меряет? Если человек не догадался зайти в доки почитать, и задал вопрос в гугл-вот и растёт рейтинг языка. Было бы интересно, если бы этот рейтинг составляли по числу посещений документации ЯП.
splav_asv
Искать в документации с помощью Google во многих случаях проще. Обычно так и делаю. Google у меня уже дрессированый, первой строкой(максимум второй если в нескольких языках такое есть) нужное выдаёт. А дальше уже по ссылкам в документации.
khim
Это, кстати, смещает выборку ещё больше. Ибо про python set я буду искать либо «python set», либо «python 3 set», а вот про C++ — как «std::set».
В первом случае в запросе есть имя языка, во-втором — нет.
kuftachev
На Тостере 95% вопросов дошкольного уровня. Ну Вы и критерий нашли!
wegres
Неизвестно какого уровня запросы в поисковых системах, по которым рассчитывается индекс TIOBE. Может, тоже дошкольного, типа Should I learn PHP or JS?
munrocket
И в правду какая то ерунда, ваша таблица лучше отображает действительность! Только выборка чуток не репрезентативная.
Ostan
Можно измерять объём кода написанного на некотором языке программирования за всё время, в символах. Или взять производную по времени от этого показателя, и таким образом узнать скорость с которой пишется код (добавляется в мировое достояние) за единицу времени: за день, неделю, месяц, квартал, год.
Разные области программирования имеют разный вес. Думаю что для веба написано намного больше кода чем для встраиваемых систем. Сравнивать нужно взаимозаменяемые языки. Для системного программирования один рейтинг, для веб-программирования другой.
Alexeyslav
по-символьные метрики уже проходили, не работает это. Лучше измерять сущностями, операторами и отдельными элементами языка. Но и это измерение неидеально. Не отражает оно ни сложности программы ни её объёма т.к. не учитывает применение фреймворков.
svanichkin
хз, я как писал на Objective-C так и пишу, на Swift я не переходил и надеюсь не придется
KvanTTT
Почему надеятесь что не придется?
svanichkin
Потому что я люблю Objective-C, он красивый, простой, надёжный и родной… а сказать такое же про Swift я не могу – какая там уже по счёту версия swift появилась без обратной совместимости? А как там дела с обертками для сишного кода? А синтаксис этот подобный C/js/as/java/… не утомил ещё никого?
mozomig
Где мой Kotlin?
DNL2000
На чем основаны ваши выводы?
RatWar
1С очень популярен в России, возможно по кол-ву вакансий на 1-ом месте
kuftachev
Не думаю, что в обозримом будущем куда-то денутся основные языки, хотя вакансии просматривать нужно.
Почему-то в комментариях много смеются над PHP, я тоже над ним смеялся, пока не поучил Python, хотя и JavaScript ещё то дитя наркотиков.
hatman
Все очень зависит от страны использования и правил выборки.
Например, 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
Т.е. например, Питона много, но по факту он просто упоминается во множестве вакансий, как «хорошо бы было бы знать». Это популярность или нет?
speshuric
В голосовалке SQL нет :(
haldagan
И HTML тоже, вот беда…
Все-таки SQL — это Query Language.
DelphiCowboy
SQL — это декларативный язык программирования.
Хотя, в списке есть другие декларативные языки программирования — функциональные.
Причём, PL/SQL, поддерживающий императивное программирование — тоже в списке отсутствует.
DrPass
В отличии от них, SQL не является тьюринг-полным. И в общем-то это вспомогательный инструмент. А PL/SQL не попал в список ввиду малого количества разработчиков, естественно.
speshuric
В SQL:1999 в стандарт введены рекурсивные CTE и вообще-то даже стандартный стал полным по Тьюрингу. При этом аналогичные расширения уже были у некоторых вендоров (Oracle точно, и, кажется, IBM DB/2). При этом T-SQL, PL/SQL и многие другие "расширения" содержали циклы и процедуры (т.е. тоже Тьюринг-полные).
Так что этот аргумент не состоятелен.
"Вспомогательность" SQL тоже спорная.
AxisPod
Как я вижу по современным разделениям
Самые распространённые — тут и так всё понятно, тут непонятно как оценивать
Самый востербованный — если оценивать по вакансиям, тут естественно название опять ничего не говорит о реалиях, а говорит о уровне роста востребованности в период времени
Самые популярные — а это вообще сферический конь в вакууме описывающий сколько из общего числа зачастую не очень умных программистов заинтересовалось данным языком, если оценивать по бордам и вопросам.
И я вообще не понимаю, как люди пытаются по кол-ву вакансий, вопросах на форумах и подобным показателям, определить популярность языка. Максимум, что я вижу, это попытку показать видимость своей рабоы.
br0x
Есть простой и точный способ. Берём 100 программистов, например, комментаторов данного поста, и просим каждого из них составить рейтинг, оценив 5 (по его мнению) наиболее популярных языков баллами от 1 до 10. Статистика даст ответ.
AlexPu
В принципе желающие вполне могут озаботится сбором более подходящей статистики на linkedIn — если применять статистические методы анализа достаточно аккуратно, можно получить весьма актуальные результаты.
проблемы как обычно три:
1) администрация linkedIn за подобные исследования хочет денюжку (за исключением случаев, когда такие исследования носят явную социальную направленность. Иными словами могут быть использованы в PR компаниях)
2) Идея «аккуратности» применения статистический методов исследований как правило непонятна большинству исследователей — в том гипотетическом случае когда некто решит провести такие исследования, все сведется в поиске ключевых слов в профайлах с последующим вычислением средних значений
3) третья проблема мне неизвестна, но наверняка существует
vanxant
Третья проблема например в том, что линкедин — гребаные спамеры, которых многие ненавидят? А кое-где вообще забанили на государственном уровне.
AlexPu
Если кое где банны на государственным уровне чем-то мешщают профессионалам, то этих «профессиналов» можно не учитывать в любой статистике — она (статистика) от этого только выиграет
anonymous
Нужно разделять:
1) Я оказываю услуги по написанию корпоративного софта
2) Я пишу свой софт на продажу
3) Мне скучно я эксперементирую
У каждого пункта будет свой стек и язык
Давайте будем реалистами 90% работает на компанию,90% из этих компаний-это не ит компании
Бизнесу всегда нужно: универсальность, гибкость и стоимость.
Мелкий бизнес:
PHP
Средний и большой:
Java или C#
Т.к нынче щас мода на Веб, то ясен фиг, что Javascript будет везде.
И вот примерная статистика:
1) Javascript(так или иначе используется в вебе)
2) PHP(backend, т.к мелких компаний в разы больше)
3) Java (универсальность)
4) C#( ибо Windows окружение)
euroUK
Я бы хотел отметить, что C# сейчас — это не только Windows. И что самое смешное, в бенчмарках он уже быстрее Java на Linux.
C# vs Java on Linux
Web Framework Benchmarks
Имхо, сравнивая темпы развития C# и Java, через пару лет C# станет лидером в энтерпрайз секторе.
dplsoft
не станет, увы. уже не стал, и не состоялся. полностью игнорируя все факты о темпах развития, и все прогнозы, пророчившие аналогичную победу еще несколько лет назад. увы.
вы, как минимум, забываете про проблемы обратной совместимости. (вы смешиваете «развитие» и «изменчивость»?). код, написанный 3-5-7 лет назад должен собираться и работать на новых компиляторах точно так же, как и 3-5-7 лет назад на старых компиляторах.
а этого в шарпах, увы, не происходит. по крайней мере как я вижу. только недальновидный будет вкладываться в большие долгоживущие системы на шарпах в таких условиях.
ну и стандартизация с описанием эталонной модели работы языка там тоже не очень то дотягивает до уровня, что бы обеспечить процесс аналогичный сертификации сторонних реализаций джава-машины.
пока эталонный компилятор создает только майкрософт, шарпы будут жить только там, где его двигает майкрософт, а на всех и вся их банально не хватит.
но для не очень больших короткоживущих приложух, с малоизменяющимися требованиями, простыми процессами внутри, отсутствием «бизнес-процессов» и проблем с этим связанных, отсутствием проблем долгой поддержки и постоянного развития — шарпы самое то. и геймдев на юнити — тому прямое доказательство.
euroUK
Я конечно спрошу у вас, как давно вы интересовались C#? Компилятор Roslyn — уже давно open source — GitHub Обратная совместимость кода присутствует, проекты 5 летней давности вполне себе собираются.
Что касается .Net как такового — .Net Core — это действительно лучшее, что произошло за последние лет 10. Это опен сорс ссылка и кросплатформенно, а производительность уже выше вылизанной Java, при этом с каждым релизом она растет.
Так что ваши взгляды на Майкрософт отстали лет на 5
dplsoft
>> Компилятор Roslyn — уже давно open source — GitHub
…ну я вам про козлов, а вы мне про баранов. я не говорил про опенсорсность компилятора ну вот совершенно ничего.
Я смотрю на описание проекта… на майнтейнера… и вспоминаю вышенаписанное мною про то, что
Вы знаете — вот у руби тоже компилятор опенсортный. Только «10 его портов и 5 реализаций»… они, конечно, совместимы друг с другом, но код работает на них «немного по разному»; версии майнстрима нарушают обратную совместимость, хотя — (по заявлениям) «всё вроде как собирается».
Опенсорс — не гарантия и не залог успеха.
Для сравнения: вспоминаем историю Java: она не была опенсорс насколько я помню. Но у неё была четкая, хорошо документирвоанная модель поведения, набор требований и тестов, процесс сертификации сторонних джава машин. Только на вскидку я могу вспомнть как минимум три джава машины — от Sun, от IBM и от сообщества — OpenJdk.
В шарпах есть что либо подобное? насколько я знаю нет.
>> Обратная совместимость кода присутствует, проекты 5 летней давности вполне себе собираются
и вот опять же… как это доказать? у вас есть стандарты, требования, модель поведения, тесты? как убедиться что у вас — не «хеппи стори выжившего» которому «просто повезло»?
Как взять результат сборки новым компилятором, прогнать его по официальным тестам требований к старой версии языка — и убедиться что поведение старого кода на новом компиляторе _действительно_ не изменяется на всем поле требований к поведению?
Не выйдет же, такую проверку устроить с шарпами, ага?
Что в текущей ситуации остается? верить вам на слово или вашему опыту? ОК, мы верим что вы уверены в своей правоте. А объективно что мы имеем? имееем субъективную точку зрения, предположительно фанатично(?) настроенного разработчика. простите.
Ну и снова про переносимость и отсутствие четкого стандарта. Понимаете… ну вот сделаю я, для примера, порт Roslyn компилятора и .net машины на эльбрус-процессор… И вот как доказать, что моя дотнет-машина работает точно так-же как на большой официальной десктопной платформе?
Где стандарты на поведение .net-байткода и процесс сертифкации компиляторов, разработанных не майкрософтом? вы с подобным подходом прогнозируете успех в интерпрайзе, где уже завоевала признание джава? ну ну.
Говорите у дотнет произволительность выше? да фигня это, извините. железо дешевеет и дешевеет. А вот труд людей, перерабатывающих код — дорожает. Стоимость любого чиха связанного с переработкой кода после выхода очередного компилятора — растет не линейно от объема кода. Потому и вопросы о которых я говрю — крайне серьезны для больших и долгоживущих проектов.
А майкрософт, простите, не сильно то и чешется в этом направлении особо. Они делают популярный продукт. _популярный_. Понимаете? Как руби, как питон, как js — они с ними фактически конкуриют, не с джавой. Джава «в поп-массовой культуре» не популярна))
А интерпрайзу популярность не сильно нужна. Нужна надежность, контролируемость, стабильность, экономия вложений. Один раз написал — и будь уверен что в оно будет не только собираться но и работать точно так же. ну как минимум, пока ты в пределах задокументирвоанного повдеения.
Именно этим джава получила признание.
areht
кажется, вы в кучу смешали исполнение байткода, компилятор в байткод, совместимость и стабильность.
энтерпрайзу альтернативные компиляторы, например, зачем?
IvanNochnoy
Хм… Гугл по запросу roslyn forward compatibility problems выдает только одну статью с очень экзотическим случаем. Похоже, слухи о том, что старый код не компилируется в Roslyn, несколько преувеличены.
Теоретически… а на практике МS сделали компилятор как службу еще 4 года назад, а в Oracle до сих пор, как в 95-ом, кроме того, напомню, что Roslyn — open source, так что его не только MS двигает.
AlexPu
>>Нужно разделять:
разделять не нужно — речь идет о статистике «популярность языков программирования»
Вот когда (и если) вы лично начнете собирать статистику «популярность языков программирования среди оказателей услуги по написанию корпоративного софта», тогда да — нужно разделять. Вам лично я нужно я имею в виду ибо сильно подозреваю, что никому кроме вас такая статистика не пригодится (хотя, как знать — оно всяко бывает)
third112
Сравнение языков — тема, которая, видимо, никогда не потеряет актуальности, что доказывают регулярные холивары. Видимо, в таких сложных вопросах не может быть идеальных рейтингов. Взять, нпр., индексы цитируемости н-т. литературы. Предполагается, что высокий индекс показывает востребованность данного источника. С этим можно согласиться. Но из этого зачастую делается неверный вывод, что чем выше индекс — тем лучше источник. А это не всегда так — может быть ситуация, когда одиозную статью поминают только для того, чтобы пнуть. Парадокс Герострата — мало кто помнит, кто построил храм, но все помнят, кто его сжег. Поиск документации на ЯП может, нпр., означать не что на нем много пишут, а что с него много переводят ранее написанное. При всех очевидных минусах рейтингов их явно или неявно широко используют для продвижения и выбора продуктов, а от индексов цитируемости явно или неявно зависит ЗП и гранты научных сотрудников многих НИИ и универов. Даже ссылка в Википедии зачастую зависит от индекса-рейтинга.
achekalin
А зачем он это делает часто?
unabl4
Github, как мне кажется, географически (в смысле география юзеров) ОЧЕНЬ biased в сторону США.
Иначе я никак не смогу объяснить 4-ое место Ruby. Сам на нём пишу (писал) и прекрасно знаю, что он почти везде, кроме США, уже давно почти никем не используется. Во всяком случае на 4-ое место ему точно никаким образом не подняться.
Так же для валидации можно обратить свой взор на глобальный опросник от StackOverflow — insights.stackoverflow.com/survey/2018, раздел «Most Popular Technologies»
Neikist
Разве? По моему еще в японии используют нередко.
unabl4
Родину языка-то я и забыл. Да, тоже может быть. :)
saag
А также в Британии, и кажется в Канаде
springimport
По моему, если и составлять какой-то рейтинг, то нужно делить его по областям, а не мешать все в кучу.
Так же надо брать не первый-второй-третий, а группа 1, группа 2 и так далее.
Например. Думаю что всем очевидно что в вебе самые популярные это: js, php и sql (если его можно считать языком). Потом идет группа 2: питон, ruby, java. Но я не спец и могу ошибаться.
Если взять разработку под windows, то наверное в первом эшелоне будет нечто вроде: c#, c/c++. Во второй группе, например, будет питон и java.
foal
Ага, а то все эти рейтинги выглядят как опрос «самая популярная медицинская профессия” и варианты ответа – медсестра и нейрохирург. Как вы думаете, какое будет соотношение….
Nice-L
Уважаемые гуру, а человеку, который только начинает учиться программированию, какой язык вы бы посоветовали в качестве самого перспективного?
shiru8bit
Мне кажется, новичку нужнее язык доступный и понятный, а не перспективный.
dplsoft
который надо не зыбыть сменить на что-то «не учебное» в конце обучения.
ибо боевой истребитель — он не для тех кто только учится.
для учебы — учебные самолетики, простые в управлении.
areht
В качестве перспективного где?
«Программирование» — это много смежных направлений. В вебе одни языки, в ИИ другие, в геймдеве третьи. И в каждой стране свои предпочтения. А ещё есть ваши личные предпочтения.
изучите 3-5 языков в близких вам направлениях, потом сами поймете чего не хватает.
dplsoft
по поводу популярности, у меня был, однажды, разговор.
человек «топил» за руби, но сути вопроса это не меняет:
— 80% проектов на гитхабе сейчас начинают на _этом_языке_!
— а ты посмотри, пожалуйста, сколько этих «проектов» не будут заброшены уже через 2-3 месяца?
(молчит)
вот я вся «суть популярности», имхо. шумиха, мода, раздувание собственной значимости — направленные на, по сути, обман тех, кто «не особо в теме».
если же хотите знать мое мнение, то оценивать надо кластерами, в пространстве с измерениями вида: область задач, объем кода и человекочасы-затрат вложено, время жизни проекта, интенсивность изменений (вкладываемые в работу человекочасы), оценочная стоимость разработки продукта по средней ставке специалиста на рынке и средняя цена этого специалиста, интенсивность изменений требований к по.
про последнее все забывают и ставят на одну планку сравнения «популярности» скажем руби и джаву, забывая, что рефакторинг большого кода в языках с динамической типизацией — совершенно другая лебединая песня, чем автоматическое отслеживание зависимостей и использования типов в языках со статической типизацией.
все языки — хороши в одном и сложны для другого. сравнивать надо сопоставляя схожие по областям и задачам. учебные языки нельзя тащить в «кровавый интерпрайз». в хаосе постоянно изменения ситуации, оно там просто не выживет «нигде и никак», окромя мелких утилит да сервисного скриптования процедур сборки и обслуживания боевого софта. но и учить новичков безднам джавы, если они банально не сталкивались с проблемами, из-за которых тут «устроено именно так как устроено» — рано. не поймут.
но, увы, задаваться этими вопросами… как правило не задаются. мода направлена на поиск очередной серебрянной пули. и, кажется, что «популярные статистики» направлены не на выяснение правды, ибо она сложна и не понятна, а на расчесывание ЧСВ у хомячков и целевой аудитории. имхо. что и есть ответ на поставленный в заголовке вопрос. тоже имхо )
kalininmr
мне кажется должна быть качественная оценка ценности кода
например:
1) массовые либы
2) не очень массовые либы
3) массовый софт
4) специализированный софт
5) корпоративный софт
легаси код пожалуй должен иметь отрицательный баланс — его пишут от безысходности на конкретном языке
guai
хотел бы увидеть статистику по тем языкам, которые люди ненавидят и желают их авторам скорой и мучительной смерти; и по тем, которым желают процветания и поскорее покорить мир
LynXzp
Статья на хабре: Какие самые нелюбимые языки программирования? Спойлер: MS — корень зла.
saipr
А где Tcl/Tk
Вообще-то мешать все в одну кучу я языки программирования и скриптовые языки — это, на взгляд, нонсенс.
А что творит Python3 с unicode-ом?
И куда это делся Tcl?
Странно все это!
JosefDzeranov
Всем привет. Создал курс по Основам программирования с видео лекциями. Советую всем пройти. stepik.org/course/5482/syllabus
riot26
Очень странно что карму не слили ещё за спамерский пост.