«Где та молодая шпана, что сотрет нас с лица земли?»
Экзистенциальным вопросом, вынесенными в заголовок в формулировке Гребенщикова, я задался после очередного раунда обсуждения в одном из сообществ на предмет того, нужны ли начинающему web backend девелоперу знания SQL, или ORM все и так сделает. Ответ решил поискать немного шире, чем просто про ORM и SQL, и в принципе постараться систематизировать, кто те люди, которые сейчас идут на собеседования на младшие и средние разработческие позиции, какова их история и в каком мире они живут. В целом-то мнение у меня было, но оно сформировано личным опытом найма и явно скорректировано под локальный рынок. В общем, стало любопытно. Вот что удалось найти.
Глобальная популяция разработчиков
Чтобы как-то подойти к вопросу, решил начать с поиска данных о том, сколько в принципе сейчас разработчиков в мире и как эта популяция изменяется с течением времени.
Оценки в разных источниках называют числа в вилке от 12 до 30 миллионов человек. Остановиться решил на данных от SlashData, потому что их методология показалась мне вполне сбалансированной и подходящей для моих нужд. В оценке они учитывали количество аккаунтов и репозиториев на Github, количество аккаунтов на StackOverflow, аккаунты npm и данные официальных источников о трудоустройстве в США и Европе. Также они откорректировали получившиеся числа при помощи своих собственных 16 исследований, которые охватывали примерно по 20 000 человек для каждого опроса.
По данным SlashData получилось, что в четвертом квартале 2018 года в мире было примерно 18.9 миллионов разработчиков, 12.9 миллионов из которых — профессиональные, то есть зарабатывают на жизнь программированием. Те, кто не является на данный момент профессиональными разработчиками — это люди, для которых программирование является хобби плюс те, кто сейчас изучает профессию (разнокалиберные студенты и самоучки). Ну то есть вот намек на численность группы, которая меня интересует — 6 миллионов человек. Честно признаться, это больше чем я ожидал.
Вторым сюрпризом для меня стали темпы роста поголовья программистов: со второго квартала 2017-го года по четвертый квартал 2018 оно увеличилось с 14.7 до упомянутых 18.9 миллионов, или выросло на 21% за 2018 год! Если бы меня попросили оценить темпы роста количества программистов, то я бы сказал, что это около 5% в год с небольшим ростом темпа ежегодно. А тут оказывается целых 20%.
Кроме того, SlashData оценивает, что к 2030-му году популяция достигнет 45 миллионов. Нетрудно посчитать, что это подразумевает рост на чуть больше чем 8% ежегодно, а вовсе не 20%, но они ссылаются на коррекцию с учетом проникновения интернета (сейчас около 57% в мире по данным Statista) и еще нескольких факторов, например количества разработчиков на душу населения. Географически, сильнее всего растет количество разработчиков в Индии и Китае, предположительно Индия обгонит США по количеству разработчиков к 2023 (это уже данные C# Corner).
В общем, программистов будет много, как ни крути, потому что спрос растет. Кстати, о спросе.
На что есть спрос?
Для оценки спроса я пользовался данными HackerRank за 2018 и 2019 года.
По языкам программирования самый большой спрос на JavaScript, Python и Java практически по всем индустриям, за исключением Computer Hardware. В последней наибольший спрос на C/C++, что и понятно, в железячных проектах еще сохраняются требования по ресурсоемкости и производительности соответствующего софта.
По фреймворкам наибольшим спросом пользуются AngularJS, Node.js и React, причем по ним самый большой разрыв спроса и предложения, что, кажется, объясняется скоростью, с которой меняется экосистема JavaScript-а, потому что например по ExpressJS предложение уже превышает спрос.
По компетенциям работодатели ожидают от кандидатов в первую очередь Problem Solving skills. Около 95% работодателей упоминает эти навыки как важные. Programming Language Proficiency на втором месте с 56%. К слову строчки с фундаментальными знаниями алгоритмов, структур данных и прочего Computer Science вообще нет, то ли не было в опроснике, то ли так массово академические знания уже не требуются.
Database Design нужен 23.2% компаний размером до 100 человек, и 18.8% компаний свыше 1000 человек. Ага, вот оно похоже про ORM и SQL! Логичное, имхо, объяснение в том, что в больших компаниях появляется выделенная роль DBA, который ответственен за этот аспект, а следовательно можно смягчить требования к девелоперам и нанимать быстрее. А вот с System Design наоборот: 37.0% в маленьких, 44.1% — в больших. Казалось бы, в больших должны быть выделенные архитекторы, но, возможно, они просто не в состоянии покрывать количество генерируемых систем. Или в System Design заодно вкладывают те самые фундаментальные алгоритмы и структуры данных, тогда становится немного понятнее.
Маленьким компаниям больше нужен Framework Proficiency и меньше вышеупомянутый System Design, из чего можно сделать капитанский вывод о том, что стартапам важно как можно быстрее запустить как-нибудь работающий продукт, а завтра будет завтра.
Что учат студенты?
Здесь я опирался на данные еще одного исследования HackerRank.
Важно учитывать, что несмотря на то, что программирование в том или ином виде преподается в университетах (имею в виду Computer Science специальности), больше половины опрошенных сказали, что занимаются в том числе и самообразованием.
Современные студенты предпочитают учиться по YouTube, в то время как более взрослые разработчики склоняются к тьюториалам и книгам. И те и другие активно пользуются StackOverflow. Отношу это на то, что видео — привычный медиаканал для поколения Z, в то время как игреки еще застали эпоху без блогеров.
Учат то, что востребовано работодателями: JavaScript, Java, Python. Указывают, что знают C/C++, но это вероятно потому, что эти языки используются для преподавания в университетах. Учат JS фреймворки, но спрос существенно выше предложения, поэтому видимо активно учат уже найдя первую работу.
В целом, ожидаемо учат то, на что есть спрос.
Студенты от первой работы ожидают в первую очередь профессионального роста, на втором месте (в некоторых странах на первом) work-life balance, на третем — интересные задачи.
Динамика популяции разработчиков по языкам программирования и типам ПО
Web приложения на первом месте с оценкой в 16.9 миллиона разработчиков. Это опять данные SlashData. Дальше Backend Services (13.6 млн), мобильные приложения (13.1 млн) и десктоп (12.3 млн). AR/VR и IoT сектора постепенно набирают популярность, AI/ML/Data Science существенно выросли за последние два года.
Быстрее всего растет Javascript, его сообщество уже сейчас самое большое, только за 2018 год выросло на 2.5 миллиона. На нем пытаются писать даже в секторах IoT и ML.
Python за 2018 год прирос на 2.2 миллиона за счет роста популярности ML, где он традиционно силен, а также за счет простоты освоения и удобства языка.
Java, C/C++ и C# растут с меньшей скоростью, чем общая популяция разработчиков. Они теперь редко являются языком программирования, с которого люди предпочитают начинать. Спрос на разработчиков тут более-менее сбалансирован с предложением. Думаю, что Java росла бы еще медленные, если бы не Android.
PHP второй по популярности язык программирования веб приложений и он тоже существенно растет (на 32% в 2018 году). Его сообщество оценивается в 5.9 млн разработчиков. Несмотря на полярное мнение насчет репутации PHP, он довольно прост в изучении и широко распространен.
Как учатся современные молодые кандидаты в сравнении с прошлыми поколениями
Снова данные HackerRank. Те, кому сейчас от 38 до 53, своими первыми проектами указывают игры.
Подтверждаю, кстати, первым моим более-менее рабочим проектом были «крестики-нолики» до пяти в ряд с неограниченным полем, вторым — игра в 15. Писал я все это на БК 010–01, там был вильнюсский бейсик, он же BASIC-86 и фокал. Эх.
Современные начинающие программисты (до 21-го года) первыми проектами пишут калькуляторы и веб сайты.
Среди представителей поколения X почти половина начали писать код до 16 лет, многие так и вообще с 5 до 10 лет (преимущественно те, кому от сейчас от 35 до 45 лет). Более менее понятно почему: источников информации было мало, и чтобы стать программистом нужно было действительно этого сильно хотеть, а те, кто сильно хотел, начинали программировать рано. Те, кто хотел не так сильно, к сегодняшнему моменту скорее всего имеют другую профессию, поэтому картина по социологии именно такая.
Сегодняшние молодые кандидаты только в 20% случаев начинают программировать до 16 лет, большинство — где-то между 16-ю и 20-ю. Но им и значительно проще учиться, теперь это гораздо доступнее.
Выводы
Железобетонного ответа на вопрос, нужен ли сегодня начинающему web backend девелоперу SQL, я так и не нашел, но зато подкорректировал свое представление о современной популяции программистов.
Очередное поколение разработчиков — обычные люди, в чем-то напоминают прежних квартирный вопрос только испортил их. Они удовлетворяют спрос, который создается работодателями. Порог вхождения в профессию стал ниже из-за более удобных инструментов и фреймворков, которые позволяют быстро добиваться результата. Больше народу сейчас становятся программистами, цифровое поколение (поколение Z) так и вообще живет в технологиях с самого рождения, для них это обычная профессия, не хуже других.
Тех, кто знает, что латенси L1 кэша это ~4 цикла, и что кэш лайны лучше не сбивать без необходимости, становится меньше в процентном отношении к общему размеру популяции. Однако волноваться о трудоустройстве им не стоит, кто-то же в конце концов должен писать низкоуровневые вещи, где это по прежнему нужно. Равно как не стоит волноваться и тем, кто обладает глубокими фундаментальными знаниями в системном дизайне и приобрел их в кровопролитных практических боях, а не просто следует карго культу. Потому что умеющих «просто писать код» и «просто» пользоваться фреймворками в командах будет становиться больше, и для того, «чтобы не было мучительно больно за бесцельно прожитые годы» © их нужно будет балансировать как раз такими людьми.
Софт скиллы из категории желательных постепенно мигрируют в обязательные (в подтверждение этого у меня нет объективных данных, просто практические наблюдение). Количество программистов растет, и их всех нужно направлять для достижения результата, хоть прямым, хоть непрямым управлением, а для этого как раз и нужны софт скиллы.
«Войти в IT» представляется мне локальной региональной историей, характерной для тех локаций, где доход программиста существенно отличается от дохода сравнимого по квалификации «не IT» специалиста. В Минске, где я живу, так это вообще массовое движение, каждый день вижу рекламу очередных курсов о том, как попасть в заветное IT, а клининговые компании таргетятся в программистов с посылом «Понимаешь код на этой картинке? Значит можешь позволить себе не убирать в квартире, мы сделаем все за тебя.» То же самое по видимому происходит в какой-нибудь Индии. В доказательство этого данных у меня тоже нет.
В целом, популяции программистов ничего на мой взгляд не угрожает. Бухтеть о том, что настоящих программистов днем с огнем не сыщещь, а кандидаты сплошь и рядом «ничего не знают», не стоит. Они такие же умные и способные, может быть даже умнее и способнее, чем «настоящие программисты», просто приобретают те знания, которые от них требует бурно растущий рынок и откладывают на потом то, что им пока не требовалось и не принесет бенефита прямо сейчас. Выучат, когда будет нужно, потому что они по прежнему хотят учиться. Наверное, не все будут на это способны, но и не всем это понадобится, рынок точно в прогнозируемом будущем будет легко принимать людей, способных быстро собрать на каком-нибудь фреймворке очередной концепт приложения.