Блог

Cтоит ли учить JavaScript в 2020?

Сегодня не секрет что обучение программированию - одно из самых выгодных вложений своего времени в Украине и соседних странах. В странах Европы этот выбор не так очевиден в виду местных законов, регулирующих работодателей, но если вы оказались в Европе с разрешением на работу и навыком программирования - вы будете также зарабатывать достаточно много. Вопрос стоит только в том, что же стоит учить из языков программирования? В 2016 мы пережили пик востребованности Java, после чего он неожиданно полетел в пропасть, выбор языка стал крайне не очевиден, php, python, великого кита C++?

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

Стабильность и востребованность
По аналитике DOU, суммарный рост количества JavaScript программистов составил за последние 8 лет составил 497%, в то время как например PHP за 8 лет суммарно просел на 26% и держится молодцом не смотря на убывание а вот Java потеряла 42% своих позиций. Java один из самых показательных случаев, демонстрирующий что может случиться с вашим языком программирования, который вы избрали для обучения, спустя несколько лет.

Для наглядности, мы выделили области до конца 2016 - когда началось падение Java и после, когда она просто уже стремительно летела вниз, понимание этого события даст вам понимание происходило с языками программирования последние несколько лет:


Этот график очень познавательный, так как самый познавательный, он дает нам понимание не что популярно прямо сейчас, а динамику - то есть что будет популярно завтра. То, что мы видим, условно можно разделить на 3 категории:

1. Язык испытывал рост до падения Java Тут хорошо видны JavaScript и Python.

2. Не рос и не испытал положительной дельты динамики, после падения Java.
Из широко используемых языков это только С++. График С++ как можно заметить в принципе скажет как хочет, слишком много языков считает “себя однозначными убийцами плюсов”, и как видим они правда его убивают понемногу. Все вместе, а не какой то конкретный. Их драка между собой нам не особо интересна, это не самая перспективная и на данный момент нестабильная область. Судя по графикам, С++ должен сначала умереть, а потом на его останках вырастет уже лидер из тех кто его кушал потихоньку. Это неинтересный в ближайшие года для нас вопрос и непредсказуемый, поэтому мы оставим его лет этак на пять и только тогда возможно можно будет понять кто его заменит, а может все еще нет.

3. Не рос и испытал положительную дельту динамики, после падения Java.

По сути это все остальные языки - C# и PHP. Мы видим некоторое выравнивание графика, особенно у php, после 2016-го, Java программисты массово переходят в другие области.

Кстати, не путайте C++ и C#, многие считают "Шарп" наследником плюсов. Но давайте без углубления в вопрос - это просто не так, C# это ASP.NET. А где используют C++, а где ASP.NET, вы и сами сможете разобраться.

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


Как видим, как минимум каждые два года, где-то, кто-то, рассказывает о том как PHP все еще крут. Я тоже с этого начну, а потом ткну пальцем про что молчат все эти статьи про то что “надо учить php, ведь он никогда не умрет”. Итак, начнем.

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

А теперь к реальности, статистика w3techs:


Имели виду они ваши новые возможности, около половины ресурсов продолжают работать на php версии 5. Дело тут явно не во времени перехода на новую версию., Релиз php 7 был в конце 2015 года, и по какой то непонятной причине, продолжается поддержка php 5. Почему php разработчикам не нужны достижения последних.. ну если php 7 версия была в 2015, то последние глобальный апдейт пятерки был в 2014, а реально важные изменения пятерки, с моей личной, ни на что не претендующей, точки зрения и вовсе были в 2009, с версией 5.3. Как вам? А все очень просто - CMS. Эти системы написаны на php а люди шаманящие их, номинально также являются php программистами. Чтобы узнать какую долю рынка занимает CMS используем публичную статистику того же w3techs:


Как мы видим, только 41% сайтов не используют CMS. А 59% оставшихся это не только php решения, но и такие онлайн конструкторы как Wix или Tilda, но процент не php решений незначительный, меньше 5%. Также надо понимать что 59% сайтов написаны на CMS, это те случаи где эту CMS удалось определить, какой то процент CMS чтобы мы не могли определить попадает в 41% сайтов и это сайты не только на php, а вообще все сайты, но я буду делать постоянно скидки в сторону php, чтобы никто не упрекнул меня в том что где то раздуваю с мухи слона, я хочу чтобы вы увидели сейчас максимально мягкую картину, потому условно представим что эти 41% сайтов только на php и других языков программирования будто бы и вовсе не существует.

Продолжим. Я не смог сделать пересечение CMS к версии языка, это дало бы нам весьма интересные результаты. Несмотря на то что 41% очень похожи на 47,6% версия языка 5, уверен, многие CMS устанавливались уже на версию 7. Я пытался составить более точные данные, опираясь на данные, которые мы публиковали в начале года, количественный анализ запросов работодателей на различные языки программирования, (прошу вас, не читайте его! за орфографию мне стыдно, наш редактор уже “отдыхал” на новый год).

По результату анализа мы выяснили, что реально интересный фреймворк для работодателя на php это laravel. Для laravel последней версии нужен php 7.2.5 +. Мне удалось получить его статистику скачивания из Composer, но статистику WordPress получить оказалось крайне тяжело, многие хостинги его предустанавливают прямо с админки, что невозможно просто отследить. Потому вопрос, правда ли пятая версия связана с WordPress и другими CMS, нам подтвердить не удалось, но судя по всему это так, ведь laravel и подобные фреймворки требует уже "семерку".

В целом, к чему это все, просто отрежем от графика популярности PHP, половину которая точно приходиться на WordPress. Хотя конечно % точно больше, ведь у нас сложности доказать что это CMS а не наоборот и мы представили что на сервере у нас может быть только php.


На сколько это точно? Ни разу, я верю что все таки большая часть людей принимавшая участие в опросах DOU, все таки не так часто работают с CMS, а больше с фреймворками. Потому примите это как вероятный минимум и накиньте 20-30% вверх - получите вероятный максимум. Но ситуацию это не спасает. Я вам только что наглядно показал почему PHP никогда не умрет - потому что CMS.

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

И не сомневайтесь - вы не будете ценным сотрудником. Всего того что вы ожидали там от IT в php нет, поскольку львиная доля этого рынка - мелкие студии, где гоняют в хвост и гриву, давно есть свои “сеньоры”, и как бы не кричали программисты “нафиг настольный теннис, дайте денег”, тут ни денег, ни тенниса не дадут. Хотя конечно это касается далеко не всех компаний. Есть отличные, превосходные даже компании, но сейчас речь идет о том куда вы попадете скорее всего на начальном уровне знаний php.

И что у нас в остатке? JavaScript и Python.
Это оба отличных языка и оба перспективных. Оба востребованных, высокооплачиваемых. Хотя сразу скажу, что оба языка хороши, просто JavaScript лучше по ряду параметров, а в "Пайтон" сама работа сложная и нестандартная, в ней тяжело стартовать.

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

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

По статистике упомянутого ранее w3techs, 95.8% фронта сайтов сделано на JavaScript, остальные 5% это извращения в 2020, вроде Flash. Это значит только одно - чтобы не происходило, пока вообще будут проекты, будет работа на JavaScript, ведь все идет в онлайн, “веб морда” есть почти у любого проекта.

Python же проекты держались за счет “накопленного жирка” - он у него был). Изначально python проекты часто долгосрочны, они меньше закрывались, но найти работу в случае чего - было тяжелей.

Сколько вакансий?
Опираясь на наш анализ вакансий в Украине, можно сказать что работы по всему Python столько же, сколько по одной группе навыков в JavaScript, а суммарно в JavaScript значительно больше работы.

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

Python альтернатива упавшей Java?
Как оказалось нет. На сегодня существуют компании полностью построившие бизнес на том, что переписывают старые Java проекты на Node.js. Как не странно, на сегодня альтернатива Java это не всегда, но часто, это Node.js. Скорее всего это связано в первую очередь с тем что Node.js веб ориентированный язык. Он лучше подходит чем Python, который язык общего назначения, под современные задачи, часто напрямую связанные с веб интерфейсами. Нейросеть на Node.js делать не стоит, а вот просто сложный сервис вроде JIRA - Node.js туда прямо проситься.

Как отличается вакансии Node.js и JavaScript?
Мы использовали открытые данные grc.ua:



Данные на конец карантина. Доля зарплат и опыта скорректированы относительно количества вакансий на графике:

  • Вакансий JavaScript больше.
  • Cредний уровень зп в Python стартует с 2 тыс, а в JavaScript с классических для веб программистов - 1 тыс долл. Позже разберемся насколько отличается уровень требований.
  • На самых топовых зп, за Python платят несколько больше, по крайней мере для указанных зарплат.
  • Новичку одинаково легко получить работу как JavaScript, так и Python, но вакансий для Python почти в два раза меньше, а значит речь только о востребованности новичка для работодателя а не конкуренции между новичками. На JavaScript конкуренция меньше.

Теперь рассмотрим что просят от новичка JavaScript и Python.
Я откинул смешные вакансии на 600$ "мидл" разработчика PHP, MySQL, HTML, CSS, jQuery, JavaScript - это те самые мелкие студии с php про которые упоминал в параграфе о php.

Сейчас я рандомно открываю вакансию с первой странички. Указан фильтр “без опыта”, сортировка по росту зп. Что адекватного мы видим?

Javascript (ES6) developer

от 11 200 до 28 000 грн. на руки 
(то есть без ФОПа и всех вытекающих плясок с налогами.
Скорее всего тут речь о типовых 600 долл на испытательном сроке и зп в 1 тыс долл + мелочь на налоги)

Условия: (сократил до важных)
  • Гибкий график
  • Дают макбук
  • Подтянут английский за счет компании
  • Возможен релокейт в офис, в Лондоне (в Лондон попасть гораздо тяжелее, чем в США, а из Лондона можно куда угодно. Лондон достаточно нестандартный пункт для вакансий)

Требования:
* Умение самообучаться и желание изучать новые технологии (пример: iOS, Swift, Sketch или Java, Android)
* Навыки работы с системой контроля версиями Git (push, merge, branch)
* Четкое понимание JavaScript (ES8 или Stage 3 или TypeScript)
* Навыки работы с API, в частности, работы с REST API, через JSON.
* Любить свою работу

Обязанности:
* Кодить


Python(Математик-программист)
от 10 000 грн. на руки

Основные задачи:
  • сбор, анализ, очистка и интерпретация экспериментальных данных;
  • построение математических моделей разработка и реализация расчетно-аналитических методов;
  • классификация и кластеризация данных;
  • поиск закономерностей;
  • построение регрессионных моделей любой сложности и глубины;
  • разработка методов прогнозирования;
  • анализ временных рядов;
  • разработка альтернативных методов анализа и прогнозирования временных рядов;
  • поиск оптимального решения;
  • решение линейных и нелинейных уравнений
Важно!
Образование - прикладная математика

Знания:
  • математическое моделирование
  • математическое программирование
  • математическая статистика
  • теория вероятности
  • знание Python или R
  • свободное владение Excel

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


И это все на зарплату в 400 долларов. Я надеюсь после такой вакансии вам станет понятно выражение “применяются для других задач” и “нейросеть лучше делать на Python” а тот пайтон что вы на трехмесячных курсах учите - можете в школах детям преподавать, этого недостаточно, Python это в первую очередь вспомогательный язык для чего то-то другого.

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

Python Middle Developer
до 38 000 грн. до вычета налогов
Требуемый опыт работы: 3–6 лет
Полная занятость, гибкий график
Стек Python/Django/Postgre
продуктивная команда (это вопрос вкуса, приоритеты в продуктовых и аутсорсинговых компаниях несколько отличаются)

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


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

Для студентов, делать дашборды с графиками
Бесплатное обучение.
Полный рабочий день
Официально, КЗоТ
3 месяца стажировка, курсы английского после стажировки.
Python, SQL 


Официально, по КЗоТ, на хорошую зарплату, в айти компанию программистов не трудоустраивают. Поверьте мне или просто просмотрите вакансии айти компаний. Это очень дорого. Стандартная практика для айти компаний в таких случаях это ФОП, так дешевле. А значит тут вряд ли можно говорить о классической программистской зарплате в тысячу долларов для новичка.

Для интереса я взял также две случайные вакансии с зарплатой от 5000$:

Engineering Team Lead / Full Stack Developer
опыт работы: 6+ лет

Вакансия на английском, так что далее мой вольный перевод:

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

Требования:
практический опыт с Node.js, фронтовый JS и различные базовые навыки которые вы точно будете иметь через 6 лет опыта.

Нужен кто-то с хорошим бэкграундом в целом, или с оксилиардом лет общего опыта(что будет равнозначно). Больше 6 лет опыта node.js программисты в 2020 почти не встречаются. Нода где-то в 2014 только начала набирать популярность.

3+ года управленческого опыта. Другими словами тим лид или аналог.

Типовой стек Node.js/MongoDB. Умение верстки. (Если это аналогично той работе этой компании, о которой я знаю, то фронтовый фреймворк не указан не просто так, то что выводит мед оборудование - не очень подходит для реакта или аналогов.)

Удаленка, собеседование по скайпу, английский.



Резюмирую - зп 5 тыс долл, стек технологий без извращений, работа из дому, английский. Опыт управления командой и общий опыт как программиста. Собственно адекватная вакансия, и компания нормальная, наш студент там работает после двух лет опыта, на мидл позиции с 3к зарплаты, а это похоже работа в том же проекте, ток лидом. Условия совпадают, ток опыта больше просят, лид качества и зп на 2к больше.

А что там с пайтоном?

Такая же вакансия, от той же компании, с такими же условиями. Тоже с требованием знать Node.js и MongoDB, без опыта управления командой. Дополнительно еще знать Angular и Python. И та же зп.

Очень показательно, ведь это в пределах одной компании, причем хорошей компании с адекватными условиями. Python + Angular вы разменяете на опыт работы тим лидом, а JavaScript все равно надо. По моему не равноценно, опыт лида за “оксилиард лет общего опыта” к вас скорее всего и так будет, первый же проект где вам в помощь наймут младшего разработчика. Вышло что вы изучили Python для того чтобы не работать руководителем команды разработчиков а остаться простым разрабом. (P.S. тут мне одна знакомая упрекнула что не каждому дано управлять командой, но как на меня это все же вопрос опыта и желания, так что останусь при своем мнении о неравноценности обмена).

Для разнообразия открою еще одну вакансию:

Вакансия DevOps 
Знания Docker и различных баз данных, ”CI/CD tools” и прочей амуниции линуксоидного сисадмина. Пайтон тут нужен для написания скриптов ко всему этому. зп до 4 500 USD на руки. 

Открою еще одну вакансию. Найду что-то, где python будет основным, исключительным навыком:

Machine Learning Data Engineer
от 3 000 до 8 000 USD до вычета налогов

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

Требования:  Python, NumPy, Pandas, с опытом развертывания моделей ML, обучением через PyTorch и знакомством с Computer Vision, Image Processing и приложениями, такими как Image Classification, Detection, Segmentation, localization. Знание анализа данных, статистики, теории вероятностей.

Кроме того, важными областями компетенции являются общая разработка программного обеспечения, другие языки, такие как JavaScript, C/C ++, CUDA, опыт работы с системной инфраструктурой и архитектурой, разработка, развертывание, эксплуатация, безопасность и распределенные системы на основе тестирования (Kubernetes, Docker и т. д.).


Подходит. Machine Learning самое что ни есть место средоточия Python. Теперь в деталях, машинное обучение, что это? Я часто слышу фразы “на сегодня Python крайне востребован” и это так. В своей области он не знает особых конкурентов, но вот что это за область? на python можно писать сайты? Можно и делает это исключительно малое число компаний.

При анализе вакансий который мы проводили в начале года, фреймворк Django на котором делаются python сайты, не попадает даже в топ 100 технологий для разработки веб сайтов. Просто надо понимать, что есть областью применения python. Это не то что вы думаете изначально, представляя типичного разработчика веб ресурсов. Я тут поинтересовался толщиною книги по основам алгоритмов машинного обучения, издательства O`Reilly, это большая книга, существенной толщины. Причем, зная "ОРелли", это скорее будет вступительное учебное пособие.

Вот цитата из него:
“Определенные свойства матрицы Гессе (реальность и симметричность) позволяют успешно определить вторую производную (которая аппроксимирует кривизну поверхности) при движении в определенном направлении.”

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

Так стоит ли учить JavaScript в 2020 году?
Сами ответьте на этот вопрос, на вкус и цвет все фломастеры разные. Но как на меня, после всего вышесказанного - это единственное что стоит учить. Конечно, если все вдруг резко начнут учить JavaScript - мы получим дефицит по другим областям, но этого не будет.

Потому, что этого не было в 2019, в 2018, в 2017, ни в 2016 когда обрушилась Java, и только ты, мой дорогой друг, дочитал это до конца и вник во все мои цифры(надеюсь) и теперь понял почему я считаю бессмысленным учить новичку что-то, кроме JavaScript.