Если рост национальных движений, таких как Code.org, CodeSpark и инициатива TechHire, является каким-либо признаком, то в Америке наблюдается сильный толчок к тому, чтобы все больше и больше людей занимались программированием.
Еще слишком рано оценивать успех этих программ. Но одно можно сказать наверняка: это приведет к тому, что все больше людей будут спрашивать: "Какой язык мне следует учить?"
Я уверен, что каждый разработчик слышал этот вопрос. Кузина Салли слышит о приятных бонусах на вашей работе, поэтому решает узнать, как стать программистом, как вы. Как только она начинает исследовать, она обнаруживает, что есть около 50 разных языков, которые нужно выучить, и не знает, какой из них выбрать.
Посмотрим правде в глаза: у нас нет хорошего способа помочь ей принять решение. У многих из нас есть твердое мнение в пользу языков, которые мы используем в настоящее время, и эти мнения обычно основаны на технических характеристиках, которые не имеют значения для тех, кто не является разработчиком.
Пример: Кузина Салли спрашивает меня: «Какой язык мне следует выучить?» Зная, что я предвзято отношусь к Ruby, теперь я стараюсь быть максимально объективным. "Смотря как. Вам нужен объектно-ориентированный язык или функциональный?» Увидев ее пустой взгляд, я пробую другой угол: «Хотите хороший язык для быстрого прототипирования? Или, может быть, что-то с безопасностью типов?» Салли все еще чешет затылок.
Салли не будет заботиться о кросс-компиляции, статической типизации или парадигмах программирования. Все, о чем она заботится, это получить хорошую работу с хорошей оплатой.
Это вдохновило меня на разработку нового показателя для языков программирования, такого как индекс TIOBE или бенчмарки TechEndeavour. В отличие от любого другого показателя, он полностью основан на экономике с точки зрения соискателя.
Знакомство с рабочим долларом
На самом деле это сложная проблема. Вы должны учитывать общее количество рабочих мест на рынке, количество других соискателей, конкурирующих за эти рабочие места, и среднюю зарплату, которую они ожидают получить, и все это полуреалистичным образом.
Я свел все это в единицу измерения, которую я называю рабочий доллар. Доллар за работу — это объективная мера силы рынка труда для работников начального уровня, использующих данный язык программирования и фреймворк. Это мера работы, как и киловатт-часы, и она показывает, сколько работы рынок сделал для вас.
Поскольку рабочие доллары являются сравнительным показателем, важно убедиться, что мы сравниваем яблоки с яблоками. Например, не совсем корректно сравнивать результаты поиска «Java» с результатами «Ruby on Rails», потому что «Java» соответствует вакансиям на различных платформах и платформах, в отличие от «Ruby on Rails», который соответствуют только одной платформе и одному фреймворку.
Так что же нам искать — только язык или пары язык/фреймворк? При приеме на работу нужно доказать, что вы можете быть продуктивным с первого дня. Это означает, что новичок должен иметь некоторое представление о фреймворках и платформах приложений в реальном мире. Итак, мои данные рассматривают пары язык/платформа.
Долларовая стоимость элемента резюме
Мне показалось полезным сначала решить более простую и общую проблему: сколько стоит один пункт в моем резюме? Другими словами, если у меня есть 2 года опыта работы с Node.js на мое резюме, сколько это стоит для меня в реальных долларах?
Мы можем получить оценку, взяв шанс, что я получу работу, и умножив его на среднюю зарплату:
dollars = (chance * avg_salary)
Чтобы найти вероятность того, что человек получит работу, мы могли бы просто взять общее количество вакансий и разделить его на количество резюме. Таким образом, если есть 5 вакансий и 10 резюме, вероятность того, что каждый человек получит работу, будет 0,5, или 50%.
dollars = ((jobs / resumes) * avg_salary)
Нам все еще нужно учитывать уровень опыта человека. Если у кого-то 5 лет опыта, разве у него больше шансов получить работу, чем у того, у кого всего 1 год? Давайте изменим нашу формулу, чтобы применить уровень силы к нашему кандидату на основе его многолетнего опыта, установив вымышленный потолок в 10 лет опыта:
dollars = ((years_exp / 10) * (jobs / resumes) * avg_salary)
Это практически самая упрощенная модель из возможных.
Поскольку мы отвечаем на этот вопрос для тех, кто не является разработчиком, мы рассматриваем очень специфический пограничный случай: долларовую стоимость элемента резюме с ноль лет опыта. Это представляет проблему:
dollars = ((0 / 10) * (jobs / resumes) * avg_salary)
Наша упрощенная модель слишком упрощена — из-за этого нуля результат каждый раз будет равен 0,00 доллара.
Оценка с большей вероятностью
Никто не подумает, что у человека с нулевым опытом работы 0% шансов найти работу. Если бы это было правдой, ни у кого не было бы работы! Все с чего-то начинают. Нам нужна лучшая модель, в которой ваши шансы на нулевой год не равны нулю.
Мы можем и должны черпать вдохновение из реальной жизни. Давайте подумаем о процессе интервью. Компании не рассматривают каждое резюме в Интернете при приеме на работу. Они фильтруют эти резюме до нескольких, используя какой-то несовершенный процесс, а затем выбирают лучшего кандидата из этой горстки. В этой модели кандидат в нулевой год имеет ненулевой шанс получить работу, если рассматривалось только его резюме.
Пример: я нахожусь в нулевом году, и вакансии, на которые я подаю заявку, выберут 1 или 2 резюме для просмотра. Если они выберут 1 резюме, у меня есть 100% шанс. Если они выберут 2 резюме, мой шанс равен 0%. Таким образом, у меня есть в среднем 50% шансов получить работу.
Это выглядит так:

Полная формула в псевдоматематической записи:
chance = avg(1..max_resumes as resumes -> {strength ^ (resumes-1)})
На английском языке: возьмите силу резюме кандидата в степень количества других выбранных резюме для каждого возможного количества резюме и усредните их вместе.
Я использовал эту стратегию в моей оценке Ruby, но немного усовершенствовал модель, чтобы сделать ее более реалистичной. У вас больше нет равных шансов сравниться с нулем, 1 или 2 другими резюме, вместо этого вероятности приближаются к нормальному распределению.
Текстовые задачи
Давайте сделаем несколько основных примеров.
1. Я лучший в мире разработчик Scala. У меня есть 100% шанс получить любую работу, на которую я претендую, а за работу в Scala в среднем платят 10 долларов. Так что мой опыт работы со Scala стоит 10 долларов.
2. Я только осваиваю Android, и у меня очень мало опыта, поэтому шанс получить работу у меня 10%. К сожалению, за работу на Android платят 1 доллар. 10% от 1 доллара — это 10 центов. Так что мой опыт работы с Android стоит 10 центов.
Мы вернемся к этим примерам позже, когда будем обсуждать рабочие доллары.
Прибытие в рабочие доллары
Но давайте немного отвлечемся. У нас есть довольно хорошее представление о долларовой стоимости элемента резюме, так что этого недостаточно? Почему мы должны перейти к новому измерению, называемому «рабочий доллар»?
Это простой факт: когда вы ищете работу, помимо заработной платы необходимо учитывать множество факторов, которые невозможно измерить количественно. Не каждая работа будет находиться в районе, где вы хотите жить или работать над интересным продуктом. Если вы ищете работу, вам всегда нужны варианты. Мы должны учитывать заработную плату вместе с общим количеством вариантов работы, например:
jobDollars = jobs * dollars
Теперь давайте снова посмотрим на двух наших вымышленных разработчиков.
1. Опыт нашего Scala-разработчика оценили в 10 долларов. Но скажем, есть только 10 рабочих мест. Таким образом, объем работы, которую рынок труда выполняет для этого разработчика, составляет 100 долларов США.
2. Опыт нашего Android-разработчика ценился намного ниже, в 10 центов, но допустим, что есть 1000 рабочих мест Android. Десять центов, умноженные на 1000 рабочих мест, равняются 100 долларам рабочих мест, так что в конце концов они равны.
С рабочими долларами мы приближаемся к правильной основе для сравнения рынков труда, связанных с различными технологиями. Единственная проблема заключается в том, что рабочие доллары являются теоретическими. Для них нет реальности. Нам нужно привязать это к чему-то, что мы можем легко понять.
Представляем модуль Javagrad
В качестве базовой единицы рабочих долларов позвольте мне представить то, что я называю Javagrad. Один Javaград равен объему работы, которую текущий рынок труда выполняет для одного студента, изучающего информатику, только что окончившего колледж, использующего Java Swing, который ищет работу начального уровня.
Это имеет смысл для меня в качестве базовой единицы. Вы ожидаете, что недавний выпускник колледжа будет хорошо подготовлен к работе, хотя и немного отстает от времени. На самом деле я не знаю, преподают ли они Java Swing до сих пор. Если нет, то это хороший показатель того, как далеко мы продвинулись с тех пор, как я учился в школе, а если да, то это хорошее напоминание о необходимости обновить учебную программу!
В июле 2016 года один Javagrad равнялся примерно 4 324 долларам США.
Дайте мне данные!
Теперь, когда у нас есть это измерение, мы можем сделать много интересных наблюдений о текущем рынке труда для программистов. Давайте рассмотрим лишь небольшую выборку технологий:
Ruby/Rails = $62,625 job-dollars = 14.5 Javagrads C#/.NET = $114,343 job-dollars = 26.4 Javagrads Java/Android = $46,958 job-dollars = 10.9 Javagrads Swift/iOS = $57,044 job-dollars = 13.2 Javagrads Javascript/Angular = $100,014 job-dollars = 23.1 Javagrads Javascript/JQuery = $94,997 job-dollars = 22.0 Javagrads Javascript/React = $91,659 job-dollars = 21.2 Javagrads
Здесь мы начинаем видеть тонкое взаимодействие между тремя факторами (работа, резюме и оплата):
- .NET — самая мощная внутренняя платформа из-за обилия заданий .NET, включая задания начального уровня. Microsoft открыла исходный код всего стека .NET и перенесла его на Linux в 2014 году, что открыло новые возможности для разработчиков C#.
- Angular, JQuery и React одинаково сильны во внешнем интерфейсе. Эти три фреймворка Javascript имеют фантастическую оплату для новичков и низкую конкуренцию.
- Ruby on Rails по-прежнему является лучшим выбором, чем изучение любой из нативных платформ приложений, потому что он сочетает в себе сильный рынок труда с хорошей оплатой и низкой конкуренцией.
- iOS опережает Android в отношении нативных заданий для приложений. Хотя в iOS меньше вакансий начального уровня, чем в Android, и эти рабочие места предлагают более низкую заработную плату, конкурентная среда гораздо более благоприятна.
Это только экономическая часть картины с точки зрения соискателя. Здесь не представлены ни атрибуты языка, такие как выразительность, инструменты и производительность, ни атрибуты сообщества, такие как удобство для начинающих и библиотечная экосистема. Модель также не учитывает, как рынок труда может измениться в будущем. Ценность заинтересованных сторон и личная ценность также не учитываются.
При этом для новичков, которые просто хотят получить хорошо оплачиваемую работу, я надеюсь, понятно, что джоб-доллары и Javagrads дают лучший ответ на вопрос: «Какой язык мне следует изучать?» в данный момент времени.
Вывод
Все мои рыночные данные (вакансии, резюме и зарплата) взяты с Indeed.com, и, к сожалению, обработка этих данных по-прежнему выполняется вручную. Хорошо, что это не очень большой объем данных, но я хочу побудить владельцев продуктов и разработчиков на Indeed (а также на любом другом сайте поиска работы) подумать о том, чтобы включить это измерение напрямую в свой сайт.
По мере того, как все больше людей входят в состав разработчиков, становится все более важным, чтобы мы давали новичкам четкую и актуальную картину того, какие технологии принесут наибольшую пользу их карьере. Изучение технологии требует много времени и усилий. Мы обязаны помочь новичкам принимать мудрые решения.