Хайп вокруг «войти в IT» привел к тому, что в разработчики и тестировщики потянулись не только студенты профильных вузов, но и люди из других профессий. Не будем сейчас обсуждать правильность подобного выбора в той или иной ситуации, а просто расспросим опытного человека в области разработки о том, как правильно подойти к выбору языка программирования и начать свой карьерный путь, раз вы на это решились или крепко задумались по этому поводу.
Этот пост — выжимка из моей беседы с Даниилом Пилипенко, создателем компании SymbioWay, занимающейся подбором и оценкой IT-специалистов для сторонних компаний и предоставляющей услуги аутстаффинга.
Даниил — профессиональный разработчик с 18-летним стажем. Начал свой путь с младшего программиста на Java. Через шесть лет стал руководителем отдела разработки, изучил PHP и JavaScript. В данный момент, кроме работы по подбору персонала, проводит карьерные консультации, выступает в качестве спикера на конференциях и вебинарах, преподает флагманский курс по Java в Skillbox.
Одно из последних выступлений Даниила, как раз посвященное выбору языка программирования, прошло при поддержке Leader-ID, что и послужило поводом для данного материала. Далее — слово Даниилу.
IT-рынок: какие изменения произошли, оценка текущей ситуации и ожидания в будущем
Если говорить про IT-рынок, то здесь интересно наблюдать за двумя показателями: количество резюме и количество вакансий. Обратившись за статистикой на HeadHunter, можно сказать, что начиная как минимум с первого квартала 2014 года спрос на разработчиков растет быстрее, чем предложение, и расстояние между двумя кривыми — то есть дефицит специалистов — постоянно увеличивается:
Весной 2020 года наблюдался «пандемийный спад», а затем резкий рост рынка с лета 2020 года по конец 2021-го. В декабре 2021-го спрос на разработчиков вырос почти в три раза, и количество вакансий в пике приблизилось к 86 тыс. по сравнению с примерно 32 тыс. в конце марта 2020 года.
Любые кризисы приводят к тому, что экономические пузыри лопаются. Ровно это и произошло со спросом на разработчиков этой весной. Отмечу, что это общемировой тренд и такая картинка наблюдается не только в России. В итоге количество вакансий вернулось к тому, каким бы оно было, если бы рост происходил обычным «допандемийным» темпом. Это хорошо видно на графике выше.
С мая этого года количество вакансий для программистов в России вышло на плато и составляет примерно 46 тыс. При этом происходит реструктуризация рынка: часть вакансий закрывается и некоторые компании уходят с рынка, но другая часть, наоборот, открывается.
Сложно сказать, что будет происходить дальше, потому что в кризисах такого масштаба никто еще не жил. Такие крупные игроки, как Amazon, Facebook, с мая этого года начали приостанавливать наем и даже массово сокращать сотрудников. Это связано со всеобщей неопределенностью и осторожностью крупных инвесторов, которые пока сами не очень хорошо понимают общие тренды и предпочитают не рисковать.
Тем не менее спрос на программистов по-прежнему превышает предложение, как и все последние 25 лет. Истинных профессионалов по всем самым востребованным специальностям сегодня все так же не хватает.
Что касается самих разработчиков, пожалуй, февраль 2022 года был самым напряженным и переломным моментом для них. Как мы знаем, после февраля (и затем в сентябре) из страны уехало большое количество IT-специалистов. Однако, по нашим данным, около 50% из них продолжают работать на российские компании. Ну и сейчас, в ноябре, некоторые специалисты по разным причинам снова начинают возвращаться из-за рубежа.
Реально ли сейчас начать карьеру и устроиться на позицию junior-разработчика?
Есть мнение, что в последнее время компании стали менее охотно нанимать junior-разработчиков. А в дальнейшем спрос на них и вовсе сойдет на нет, потому что программы сами будут писать программы. Но все это лишь слухи.
Во-первых, простые системы тоже надо кому-то разрабатывать. Взять, например, ту же Tilda, которая облегчает создание сайтов. Может показаться, что программист больше не нужен, ведь сайт можно собрать через конструктор. Но не стоит забывать, что кто-то разработал и продолжает улучшать и поддерживать саму Tilda.
Во-вторых, такие инструменты, как Tilda, имеют довольно ограниченный функционал: с его помощью мы можем легко сделать пару страничек, но какой-нибудь серьeзный продукт вроде «Яндекс Маркета» на нем не напишешь. Да и в будущем вряд ли кому-то удастся создать универсальную систему, которая будет писать любую другую систему без участия человека.
В-третьих, учитывая текущие реалии и массовый отъезд программистов уровня middle и senior, компаниям ничего не остается, как нанимать junior-разработчиков. Например, junior-разработчики, которых сейчас воспитывают в том же Skillbox, при грамотно составленном резюме, имея определенную базу и навыки, находят себе работу в течение месяца после окончания курса. Этот факт доказывает, что спрос на джунов по-прежнему высок.
Ну и в-четвертых, в каждом проекте есть задачи, которые просто не поручишь программистам уровня middle и senior, а для junior-специалистов они идеальны — просты, позволяют относительно легко войти в проект и успешно закрепляют базовые навыки.
Поэтому, если есть желание начать карьеру разработчика, — сейчас самое время.
С чего начать
Очевидный первый шаг — выбрать язык программирования и направление, которым вы хотите заниматься (об этом следующий раздел).
Второй — заняться практикой. Ощутить и почувствовать, что такое кодинг. Обзавестись минимальным арсеналом junior-разработчика (см. ниже).
Третий — найти работу применение своим знаниям и навыкам. Чтобы поддерживать и расширять экспертность в любом деле, необходимо постоянно практиковаться. Для этого недостаточно придумывать себе задачи «на покодить» или учиться на курсах. Важно как можно быстрее перейти на профессиональный уровень и найти вариант, где вы каждый день занимаетесь разработкой.
Что не рекомендуется делать на старте карьеры
Читать много книг. Некоторые книги сложны для восприятия и написаны тяжелым языком. В моей практике есть несколько негативных примеров старта карьеры с книг: такие люди иногда годами читают книги, но так и не написали ни единой строчки кода и, соответственно, пока не стали программистами.
Минимальный арсенал junior-разработчика
знание синтаксиса языка;
понимание принципов объектно-ориентированного программирования;
владение каким-либо основным для данного языка фреймворком (если речь про веб-разработку) или понимание того, как с точки зрения архитектуры создаются мобильные приложения (если речь про мобильную разработку);
знание языка запросов SQL (для backend-разработки);
понимание принципов клиент-серверного взаимодействия, базовое знание протокола HTTP и стандарта REST;
опыт работы с Git и командной строкой;
опыт командной работы (этот пункт очень желателен и существенно повышает шанс найти работу).
Как выбрать свое направление в программировании
В сфере программирования есть несколько ветвей. Первая, веб-разработка, — самое обширное направление во всем мире (по разным оценкам, более 50% всего программного обеспечения в мире — это именно веб-приложения). Веб-разработка подразделяется на направления frontend- и backend-разработки.
Вторая крупная ветвь — мобильная разработка. Другие ветви — разработка десктопных приложений, игр, встроенного и системного программного обеспечения, разработка для Data Science и другое.
Чтобы выбрать направление, можно для начала задаться вопросом, хотите ли вы работать с визуальной частью тех или иных приложений? Если да, то, имея в арсенале некоторые способности и интерес к данной области, можно начать покорять вершины frontend- или мобильной разработки.
Если же желания работать с визуальной частью нет, а хочется, наоборот, знать и понимать, как устроена серверная часть веб-приложений, как она взаимодействует с frontend’ом и с мобильными приложениями, то стоит рассмотреть для себя backend-разработку.
Если вы хотите развиваться в мобильной разработке, стоит начинать с разработки на той операционной системе, на которой работает ваш смартфон, — Android или iOS. Это значительно ускорит процесс вашего обучения и сделает его более эффективным, поскольку с высокой вероятностью вы знаете соответствующую платформу лучше другой и сможете сразу тестировать то, что вы создали.
Как выбрать язык программирования
Выбор языка существенно зависит от того, какое направление в программировании вы выберете.
Возьмем, к примеру, веб-приложения и frontend-разработку. В этом примере выбор языка очевиден — это JavaScript и в качестве дополнения TypeScript.
Если же мы рассмотрим топ языков для backend-разработки, то увидим, что треть всех вакансий в РФ и, соответственно, первое место в топе уже многие годы принадлежит языку Java.
Второе место в топе и примерно 15% всех программистских вакансий отдано Python. В этом году чуть сдал свои позиции и занимает третье место язык PHP. Четвертое почетное место в топе у языка Go. И, кажется, он скоро сможет пробиться выше. Вот эта первая четверка языков закрывают около 75% рынка. А далее, на пятом месте? идет C#. Его доля на сегодняшний день около 10%. Спрос на С# с каждым годом снижается.
Теперь попробуем сравнить языки backend-разработки между собой. К примеру, Go и PHP — языки программирования, применяющиеся в основном для создания веб-сайтов и веб-приложений. Напротив, Java и Python — более универсальные языки, на них пишут практически всё, и выбор одного из них в качестве своего первого языка выглядит очень логично.
Если задаться вопросом, насколько каждый из них подходит для enterprise-разработки, то Java будет являться несомненным лидером. Все банковские и платежные системы, Госуслуги, «Яндекс Маркет», «Яндекс Музыка» в значительной мере написаны на Java.
Вторым критерием для сравнения Java и Python является порог вхождения. И тут уже побеждает Python.
Давайте посмотрим, как выглядит вывод в консоль традиционного «Hello, world!» на двух языках.
Действительно, на первых этапах Python кажется проще для изучения (пример кода нам это доказывает), но, изучив Java, в дальнейшем можно легко переходить практически на любой другой язык: Kotlin, PHP, С# и тот же Python. Если же вначале изучить Python, то с него «прыгнуть» куда-то еще будет немного сложнее.
Третий критерий сравнения — спрос. Если мы посмотрим рынок РФ, то спрос на Java практически в два раза превышает спрос на Python. Если же посмотреть на мировой рынок, то все будет наоборот — Python сегодня в мировых лидерах. Например, такую активно развивающуюся сферу, как Data Science, язык Python оккупировал более чем на 90%.
Стоит сказать про языки Kotlin и Swift, которые практически полностью заняли собой мобильную разработку на Android и iOS.
Чтобы определиться, нравится ли человеку выбранный язык программирования, необходимо его «попробовать» — решить на нем небольшую практическую задачу. К примеру, если выбор пал на Kotlin, значит, нужно изучить его основы и попробовать написать свое первое, пусть и очень маленькое, мобильное приложение под Android.
Самым правильным вариантом для старта карьеры является «начать пробовать» и, собственно, начать писать код. И не очень важно, на каком именно языке. Главное — начать.
Можно годами изучать рынок и топы, сомневаться в выборе языка и так ничего и не сделать. А можно изучить любой из современных языков и, если он не понравится или захочется расширить свои навыки, просто перейти на какой-либо другой.
Все современные языки программирования сильно похожи, логика написания кода на них практически одинакова, за исключением относительно небольшого количества различий и нюансов, которые познаются за считаные недели, если есть уверенное владение каким-то другим языком.
Есть еще одна важная рекомендация: если вы хотите стать программистом, не стоит идти «в обход» — например через верстку, тестирование или DevOps. Есть риск потерять много времени, занимаясь нелюбимым делом. Даже если вход в разработку видится вам сложным, не стоит искать другие пути. Все трудности будут вам по плечу, если у вас будет интерес. И тяжeлый вход в самое желанное направление будет гораздо эффективнее с точки зрения затрат времени и ресурсов, чем любой «обходной путь».
В мире IT есть тенденция часто менять работу. Почему? Потому что спрос на IT-специалистов значительно превышает предложение, работу найти легко и можно непрерывно улучшать свои условия труда. Но часто люди меняют работу не из желания профессионально расти, а из-за возникновения каких-либо трудностей: сотрудник не может решить поставленную задачу, накапливается большой объем нерешенных проблем, ему не хватает квалификации или опыта, он не может организовать свою работу, и тогда он просто убегает от трудностей, меняя место. А ведь профессионализм человека в любой сфере определяется именно тем, как он умеет преодолевать трудности.
Чтобы стать профессионалом, нужно получить опыт и преодолеть как можно больше трудностей.
С чего начать изучение языка программирования
Начинать изучение любого языка нужно с синтаксиса и с практики. Это как обучение вождению: можно изучить всю теорию, все правила, но пока не сядешь за руль, водить не научишься.
Итогом обучения должна стать в идеале разработка какого-то пусть и небольшого, но полезного проекта. Например, в Skillbox на курсе по Java мы предлагаем по итогам обучения разработать поисковый движок. На подобных задачах можно полноценно ощутить, что такое создание систем с нуля на MVC-фреймворке, закрепить навыки работы с базой данных и языком запросов SQL, попробовать работу с файлами, научиться получать и обрабатывать HTTP-запросы и формировать HTTP-ответы в соответствии со стандартом REST. Без этих базовых знаний об успешном трудоустройстве можно даже не мечтать. Мало знать только синтаксис языка и уметь писать голый код, нужно понимать, как написать код так, чтобы получилась рабочая система или мало-мальски готовый продукт.
Можно ли научиться программировать на курсах?
Курсы и школы бывают разные. Есть школы, у которых все курсы хорошие, а есть школы, где можно выделить только пару достойных курсов. Любой курс разрабатывает специалист (или команда специалистов), поэтому его успех зависит от методики и профессионализма этого конкретного специалиста или команды.
Можно попробовать отыскать для себя хороший курс по программированию по следующем критериям:
продолжительность курса от шести месяцев и больше;
он включает в себя изучение основ языка и фундаментальных понятий в современном программировании;
в программе курса есть много тем, пересекающихся с требованиями в вакансиях по данной специальности;
на курсе будет очень много практики по написанию кода, а также индивидуальный и командный проекты.
Реализация командного проекта примерно на 50% повышает шанс на трудоустройство выпускников: работа под руководством тимлида, где студенты познают все горести и радости командной работы, учатся взаимодействовать, соблюдать дедлайны и участвовать в таких активностях, как код-ревью, груминг и дейли-митинги.
К сожалению, все чаще можно наблюдать проблему с трудоустройством у выпускников курсов по программированию, которые не доучились или обучались на слабом курсе. Был тут интересный случай: однажды, ко мне на карьерную консультацию пришел мужчина 57 лет, который окончил курс по frontend-разработке и не мог устроиться на работу. Он был уверен, что вся его проблема кроется в возрасте. Но на консультации выяснилось, что он не может написать ни одной строчки кода и просто-напросто не имел практики, изучив только термины и теорию. Поэтому совет для него звучал так: сначала нужно изучить основы (я дал ему конкретный перечень, что и где можно быстро и бесплатно изучить), разместить резюме, устроиться на работу и только потом уже вспоминать, сколько ему лет. Кстати, карьера этого человека сложилась отлично: сначала он устроился на работу верстальщиком и в течение года вырос до младшего frontend-разработчика.
Правильный курс может стать отличной базой для старта карьеры. Остается только вопрос мотивации и интереса самого человека. Если человек занимается чем-то вовлеченно, то он постоянно думает о своем деле и непрерывно практикуется, например на pet-проекте. Комбинация из курса и вовлеченности в дело помогает ему найти работу и стать настоящим профессионалом.
Сертификат после прохождения курса — это просто бумажка, которую можно положить на полку. Но интерес к делу не получится оставить пылиться на полке. Поэтому нельзя однозначно ответить на вопрос, можно ли научиться программировать на курсах. Кто-то научится, а кто-то — нет.
Hard и soft skills на старте карьеры: что важнее
С учетом сегодняшнего дефицита программистов на рынке, hard skills на старте более весомы. Важно хорошо уметь писать код, решать задачи. Существует мнение, что в первую очередь человек должен быть разумный, а дальше он всему научится. Моe персональное мнение состоит в том, что soft skills можно прокачать в процессе работы. А вот то, насколько человек технически подкован, на старте карьеры очень важно, и обучать его основам программирования не всегда есть ресурсы.
На рынке мнение о том, что важнее — hard или soft skills, разделяется ровно пополам. На нескольких своих последних выступлениях я проводил опрос, и эта статистика подтверждается: примерно половине руководителей важнее soft skills, а другой половине — hard skills.
Чем junior, middle и senior отличаются друг от друга?
На эту тему есть две шутки. Первая: junior еще не может работать самостоятельно, а senior — уже не может. Вторая: junior приходит к своему руководителю с вопросами, а middle — с ответами. Выводы из этих шуток следующие: основное, что отличает программистов разных грейдов друг от друга, это уровень их самостоятельности. Безусловно, уровень самостоятельности — это комплексный показатель, отражающий одновременно и hard skills, и soft skills.
Тестирование кода: важный навык хорошего разработчика
Важный навык хорошего разработчика состоит в умении тестировать код (свой или чужой) и находить там ошибки. Поэтому разработчик должен уметь писать unit- и e2e-тесты. По этому вопросу есть одно наблюдение: получается намного эффективнее, если тестовый и основной код пишут разные разработчики. Так программа гораздо быстрее вычищается от багов, улучшается тестовое покрытие и кодовая база в целом.
Методика выявления настоящего профессионала в программировании
Чем каждый день должен заниматься программист? Писать код. Поэтому, чтобы определить настоящего программиста, нужно посмотреть на то, как он работает.
Идеальное собеседование — это один рабочий день, когда мы просто сажаем человека на текущие задачи и в конце дня смотрим, как он с ними справился. Но обычно такой возможности нет, и тогда на собеседовании мы устраиваем live coding, по которому становится понятны опыт, грейд, наличие или отсутствие интереса и образ мышления соискателя.
Таким образом первая часть методики определения настоящего профессионала состоит в небольшой задаче на написание кода. Если код написан чисто, быстро, грамотно разбит на функции и методы, переменные названы понятно и во время выполнения задачи соискатель вошел в состояние потока (включился и полностью погрузился в задачу), такого человека можно брать на работу.
Вторая часть методики заключается в задавании соискателю вопросов в виде задач, которые проверяют умение думать. На такой вопрос нельзя ответить заученными шаблонами, требуется пропустить проблему через себя и искать решение на ходу. Вопросы лучше задавать по возрастающей сложности, чтобы можно было измерить уровень человека и его общий интерес к профессии.
Итоги
Мне кажется, что в программисты успешно попадет тот, кто горит своим делом. Мало просто знать язык и уметь на нем писать. Важно иметь желание разрабатывать продукты, продумывать взаимодействие компонентов приложения, улучшать кодовую базу, автоматизировать рутинные действия, расти и развиваться как специалист. И всегда помнить, что бесконечно можно смотреть на три вещи: как горит огонь, как течет вода и как работают профессионалы.