Как не потеряться в этом море возможностей, выбрать главное и не ошибиться? Очевидно, нужно держать руку на пульсе и отслеживать рынок труда. О том как это можно сделать с помощью собственного велосипеда — под катом.
Каким должен быть наш велосипед?
Во-первых, наш инструмент должен уметь сравнивать зарплаты специалистов и популярность технологии, языка программирования или конкретной библиотеки по ее названию. Я хочу просто написать «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.
Буду рад конструктивной критике и предложениям!
UPD 1: спасибо ikashnitsky, заменил круговые диаграммы для «Санкт-Петербург, сравнение MySQL, SQL Server, PostgreSQL» на гистограммы, ввиду их большей информативности.
Комментарии (25)
spmbt
07.03.2016 03:02После выбора инструмента и обучения ему (ещё такая мелочь, как опыт) нужен будет инструмент составления приветственного письма, поэтому блюдо будет неполным без https://habrahabr.ru/post/259881/ .
myxo
07.03.2016 03:11вот интересно, если отделить java-android от java-server какое будет соотношение?
ikashnitsky
07.03.2016 03:15+2Вот что можно узнать по графику средних зарплат в Санкт-Петербурге? Что похоже на знак мерседеса?
(бонус: как улучшить круговую диаграмму?)bocharovf
07.03.2016 09:21+1Изменил тип графика в статье на гистограмму.
Действительно, без конкретных цифр круговая диаграмма выглядит странновато, поэтому я ее доработаю
Бонусная ссылка права — у круговых диаграмм есть проблемы. Но на мой взгляд, лучше дать пользователю самому выбирать тип диаграммы, чем полностью отказываться от круговых.ikashnitsky
07.03.2016 15:00Да, любовь людей к кроговым диграммам по непонятным мне причинам совершенно неубиваема (справедливости ради надо отметить, что у них есть и плюсы). Всегда лучше предоставлять пользователю выбор, если есть возможность.
А вообще, очень интересный анализ. Спасибо!atikhonov
07.03.2016 16:43К слову, и столбиковые диаграммы тоже вызывают скепсис у некоторых людей, занимающихся анализом данных.
Gray_Wolf
07.03.2016 04:32Во-первых, наш инструмент должен уметь сравнивать зарплаты специалистов и популярность технологии, языка программирования или конкретной библиотеки по ее названию. Я хочу просто написать «c++» в поиске и наслаждаться результатом.
В данном случае инструмент не полностью решает данную задачу, т.к. для полноценного сравнения он должен так-же проверять резюме соискателей на предмет имеющихся навыков и зарплатных ожиданий.
Бывают случаи когда вакансий вида "ember" довольно мало, но резюме соискателей со знанием данного стека ещё меньше. И в таких случаях озвученная цифра ЗП может довольно неплохо сдвигаться в пользу компетентного соискателя.bocharovf
07.03.2016 10:37Интересная идея! Технически такое реализовать можно — у API HeadHunter есть поиск по резюме.
Одна проблема, этот поиск доступен не всем:
Поиск резюме доступен только при авторизации работодателем и при условии, что приложение входит в список разрешенных.
atikhonov
07.03.2016 11:29да, через API нельзя, но разбором страничек вполне:
https://habrahabr.ru/post/266319/
OnYourLips
07.03.2016 04:55+2Что такое средняя зарплата?
Вспоминается анекдот: «Жена директора колхоза Глаша спит со всеми, а доярка Маша не дает никому, но в среднем они обе Б...»
Ведь средняя зарплата отличается от зарплаты профессионала, потратившего 10 лет. И от зарплаты новичка тоже отличается.
Нужно считать зарплату по своему уровню. И тут все становится сложнее.bocharovf
07.03.2016 10:42Для этого есть фильтр по опыту работы с категориями:
- Нет опыта
- От 1 года до 3 лет
- От 3 до 6 лет
- Более 6 лет
ustasby
07.03.2016 10:38-1Соотношение средних зарплат: PHP 65 311 рублей, в моих кругах даже самые твердолобые зарабатывают больше, процентов на 60%. В моем городе например есть вакансии 40 000-50 000 и я точно знаю они не закрываются годами.
bocharovf
07.03.2016 12:24Соотношение средних зарплат: PHP 65 311 рублей, в моих кругах даже самые твердолобые зарабатывают больше, процентов на 60%.
Результирующий доход оценить довольно сложно: есть зарплаты в конвертах, премии, переработки итп… То, что Вы получите "на руки", может довольно значительно отличаться от "оклада" прописанного в договоре.
В моем городе например есть вакансии 40 000-50 000 и я точно знаю они не закрываются годами.
Вообще при анализе берется 2000 самых "релевантных" вакансий (наиболее свежих и содержащих ключевые слова) с указанной зарплатой. Можно попробовать "штрафовать" вакансии, висящие открытыми слишком долго. Чтобы они вносили меньший вклад в расчет зарплаты.
guyfawkes
07.03.2016 12:41Вы вращаетесь, вероятно, в кругах высокого уровня. А так удивительные истории про Сочи, лол
zirf
07.03.2016 11:18-2Статья ценная, но увы техническая. Бизнес работает немного по другому. Все равно чем вы владеете и самое обидное какой у вас уровень. Результаты вашей работы нужно превратить в деньги. Быстро и надежно. Добавьте специалистов по 1C. Их умения легко оценить в деньгах. Статистика по вакансиям дает общий тред, но увы, тут проблема та же, что и с биржами. Основными факторами являются человеческая жадность и глупость. То есть в проплаченном блоге ( у компаний есть где-то бесплатные?) пишется о светлой перспективе причем для технаря очевидна ересь, но пишут, для тех, кто деньги предложит, инвесторов и покупателей.
Да, к 1С никам маркетологов добавьте, эти люди делают погоду (не предсказывают!), а их толком и не ценят, как и знатоков вертики.
tangro
07.03.2016 12:26+1Лучший из виденных мною рейтинг зарплат в ИТ по вообще всем критериям (опыт, технология, город, позиция) ведётся на одном украинском ресурсе DO*, за ссылку на который, во-первых, банят на Хабре (ну, когда-то, по крайней мере, банили) а во-вторых он заблокирован на территории РФ.
blv
07.03.2016 17:10Хорошее использование нашего API.
Маленькаябуквоедскаяметодологическая поправка: такую статистику корректней называть статистикой зарплатных предложений. Она сильно отличается от статистики реальных зарплат (см. наш проект http://hh.ru/employer/salarystat/promo) и статистики зарплатных ожиданий, которая строится по резюме.
RomanPyr
Наверное, лучше использовать медиану вместо среднего.
zirf
Среднее понятнее чисто по человечески, статистики используют параметрические показатели, только убедившись, что распределение нормальное (гауссово) иначе — в лес. Увы для этого нужна репрезентативная выборка и проверка хоть по хи-квадрат гипотезы о распределении. Вообще, как это не смешно сравнивать лучше дисперсии.
ArjLover
лучше, если бывает ЗП — миллиард, которая сильно повлияет на среднее по всему рынку, а если будет пяток 200к при тысячах в 100к — ничего страшного.