На данный момент IT в целом — это одно из самых динамично развивающихся направлений. Каждый день появляется сотня новых библиотек, каждый месяц кто-нибудь придумывает новый язык или платформу — да что там, появляются целые направления. Время бежит и какие-то строки в Вашем резюме устаревают — грубо говоря, они больше не добавляют Вам очков в глазах работодателя. А какие-то навыки наоборот, могли бы существенно поднять Ваш рейтинг.
Как не потеряться в этом море возможностей, выбрать главное и не ошибиться? Очевидно, нужно держать руку на пульсе и отслеживать рынок труда. О том как это можно сделать с помощью собственного велосипеда — под катом.
Каким должен быть наш велосипед?
Во-первых, наш инструмент должен уметь сравнивать зарплаты специалистов и популярность технологии, языка программирования или конкретной библиотеки по ее названию. Я хочу просто написать «c++» в поиске и наслаждаться результатом.
Во-вторых, инструмент, который мы хотим создать, должен быть точным, иначе я просто зря потрачу время.
В-третьих, он должен позволять фильтровать исходные данные. Например, средняя зарплата java-программиста на момент написания статьи — 104763 рубля. Это нам хоть о чем-нибудь говорит? — нет! Без города или хотя бы региона, без указания опыта работы — это средняя температура по больнице.
В-четвертых, инструмент должен наглядно представлять результат — сравнение зарплат разных специалистов должно быть представлено на одном красивом графике.
Есть ли другие велосипеды?
Конечно. Но это какие-то другие транспортные средства.
Периодически в сети появляются результаты исследований рынка от различных серьезных компаний, например вот этот. Эти исследования выполнены на высоком, качественном уровне. Зачастую они содержат детализацию по крупным городам и различным языкам программирования. Но я еще не видел ни одного, позволяющего Вам сравнить зарплату программиста PL-SQL и T-SQL с 3 и более годами опыта.
Есть всевозможные рейтинги языков программирования, которые достаточно часто обновляются. Но извлечь из них практическую пользу очень сложно. Например рейтинг python в марте 2016 года по сравнению с мартом 2015 года вырос на 1.64%… отлично, что дальше?
Руль, колеса и другие детали ...
Источник данных
Очевидно, ключевой деталью является источник данных — от него в большей степени зависит успех нашей разработки. Такой источник нашелся довольно быстро — это API проекта HeadHunter. API позволяет получать доступ к вакансиям, размещенным на портале HeadHunter в формате json. При этом он поддерживает поиск по ключевым словам и фильтрацию по огромному числу параметров. В вопросе фильтрации я выделил два основных критерия: опыт работы и местоположение — как ключевые факторы, влияющие на уровень зарплаты.
Есть конечно и подводные камни:
- API использует пэйджинг и имеет технические ограничения: выбор не более 500 вакансий за запрос, глубина поиска не может превышать 2000 вакансий
- Валюта, в которой указана зарплата в вакансиях может быть разной
- Зарплата может быть указана как диапазон, только минимальная или максимальная, а может быть не указана вовсе.
- Наконец само название технологии, которую вы ищите, может быть указано по разному. Например: node js, node.js или даже NodeJS
Решение проблем
Ограничения на количество возвращаемых результатов за один запрос решается параллельным выполнением нескольких запросов и объединением результатов. Таким образом для каждого ключевого слова выполняется по 4 запроса. Результат каждого запроса агрегируется, а потом объединяется с остальными.
Проблему разных валют помогает решить сам HeadHunter, предоставляя актуальный справочник валют в своем API. Во время агрегации все данные переводятся в рубли.
Вакансии без указания зарплаты нам в принципе не интересны, поэтому они исключаются из выборки с помощью фильтра самого API. При указании диапазона зарплат берется среднее значение. При указании минимальной или максимальной зарплаты — это значение берется как есть.
Проблему разного написания ключевых слов в вакансиях во многом решает сам HeadHunter, учитывая синонимы при поиске по вакансиям. Если же запрос настолько специфичен, что HeadHunter о нем не знает, то всегда можно держать свой собственный словарь синонимов. Так как API поддерживает определенный язык запросов, все альтернативные написания можно перечислить через оператор OR.
Техническая реализация
Я решил реализовать свой прототип в виде веб-приложения, попутно углубив свои знания в MEAN стеке. Для наглядного отображения результатов были выбраны потрясающие графики от highcharts.js, однако, я уверен, что существует огромное множество альтернатив.
Наслаждаемся поездкой
Что в итоге мы можем получить, используя наш инструмент? Да все, что угодно!
Например Вам интересен frontend, тогда давайте сравним популярные SPA фреймворки: angular, ember и react.
По зарплате лидирует React, с небольшим отрывом опережая Angular. Ember ведет себя достаточно скромно, уже существенно уступая React.
Однако, на следующем графике видно, что количество вакансий для Angular разработчика почти вдвое больше, чем для специалиста по React. Ember снова в отстающих.
Какой можно сделать вывод?
Если Ember Ваш основной инструмент — надо задуматься.
Если Вы хотите заняться frontend и у Вас мало опыта — возможно, стоит взглянуть на Angular, проще будет найти работу.
Если Вы знаете React как свои пять пальцев, у меня для Вас хорошие новости — Вы сделали все правильно.
Россия очень большая страна, давайте посмотрим, что происходит в других крупных городах, используя тот же запрос. Для примера возьмем третий по численности город России — Новосибирск:
Похоже, ситуация изменилась количественно, но не качественно. Уровень зарплат в целом ниже чем в Москве, однако, соотношение сохраняется: специалисты React получают больше всех. И снова количество вакансий для Angular разработчика значительно больше, чем для конкурентов.
Хорошо, с frontend разобрались. А что у нас с базами данных? Сравним спрос и зарплаты специалистов по трем популярным СУБД в Санкт-Петербурге:
Удивительно, но уровень зарплат практически одинаков для всех трех СУБД. Зато есть серьезное отличие в количестве вакансий — для MySQL есть вдвое больше предложений, чем для SQL Server или PostgreSQL.
Теперь посмотрим, то происходит у наших соседей в Белоруссии. Заодно попробуем поиграть с фильтром по опыту работы. В этот раз возьмем три широко распространенных языка программирования:
А теперь посмотрим на более опытных программистов — от 3 до 6 лет:
Обратите внимание на резкий скачек в уровне зарплат Java программистов после 3 лет опыта работы. В категории от 1 до 3 лет опыта C++ является лидером по уровню зарплат, опережая Java и C#. Однако, в следующей категории от 3 до 6 лет опыта Java с большим отрывом опережает и C++ и C#. А зарплата C# программистов, изначально сильно уступающая, выравнивается с уровнем зарплат C++ специалистов.
Как превратить велосипед в лимузин?
Работодатели бывают разные: стартапы, «софтверные» компании — крупные и не очень, наконец компании, бизнес которых не связан с IT, но тем нее менее они разрабатывают что-то для внутренних нужд. Стартапы обычно на острие технологий — им не нужно тащить за собой груз legacy кода. Крупные компании должны и могут себе позволить тратить ресурсы на внедрение новых технологий. У остальных дела идут не так хорошо. В результате рынок труда имеет некоторую инерцию — новые технологии становятся востребованными не сразу. Поэтому иногда нужно смотреть наперед и предугадывать.
Итого, можно выделить основные пункты для улучшения нашего анализа:
- Вычислять рейтинг технологии на основе множества разных источников: от количества результатов в поисковой выдачи Google и заканчивая количеством проектов на GitHub
- Учитывать динамику изменений на рынке — как изменилось количество вакансий по этой технологии за месяц?
- Использовать дополнительные источники. Тут просто — больше данных, качественнее результат
Заключение
Существует одна вещь, которую никто никогда не сможет проанализировать за Вас — это Ваши личные предпочтения и интересы. Ведь для многих IT специалистов работа — это не только источник дохода, но и хобби. Занимайтесь тем, что нравится, но не забывайте о материальном.
Здесь я скромно приведу ссылку на проект на GitHub.
Буду рад конструктивной критике и предложениям!
Автор: bocharovf