Еще недавно рынок труда в IT был очень привлекательным для начинающих специалистов со всех точек зрения: низкий порог входа, высокие зарплаты, возможность работать в крупнейших компаниях. За последние несколько лет количество джуниоров существенно превысило спрос, а качество при этом оставляет желать лучшего. Текущий кризис подогрел ситуацию, и теперь, чтобы стать по-настоящему востребованным программистом, придется приложить гораздо больше усилий.
Примерно в 95% случаев решение о приеме на работу новичка зависит от собеседования. Резюме играет небольшую роль: работодатели обращают внимание на строчку об образовании и наличие проектов. В ходе беседы оценивается, понимает ли кандидат современные парадигмы и технологии разработки – то, чему не обучают в вузе. Также положительную характеристику дает активное стремление человека попасть на работу: задает ли он вопросы по каким-либо задачам, в том числе по тестовым заданиям, желает ли получить новые для себя источники информации и в кратчайшие сроки изучить их.
В этой статье я расскажу обо всех этих факторах и о том, что нужно делать начинающему программисту, чтобы уверенно войти в рынок труда и как можно быстрее стать профессионалом.
Образование – первое, на что обращает внимание потенциальный работодатель на собеседовании с начинающим программистом. Сегодня рынок труда в IT пестрит самоучками и специалистами с поверхностными знаниями, и, чтобы найти среди них действительно ценные кадры, компании вынуждены прикладывать серьезные усилия. Поэтому, если вы хотите быть на голову выше многих кандидатов, уделите особое внимание вашему образованию.
Прежде всего, хорошему программисту необходимо фундаментальное техническое образование государственного вуза. Почему это так важно?
Несмотря на то, что современное программирование слабо связано с такими областями, как дифференциально-интегральные исчисления, математический анализ, теория компиляции и другие дисциплины, которым годами обучают в вузах, они дают студентам важные навыки. Понимание сложной технической информации, способность находить нужные данные самостоятельно и применять их на практике, психоэмоциональная устойчивость – все это, несомненно, является определяющим в сфере IT.
Помимо ведущих московских вузов, во многих компаниях котируются и региональные. Покажу на нашем примере – компании DD Planet. Один из офисов находится в Туле, где работает большинство наших разработчиков. Все они выпускники двух ведущих государственных вузов Тулы: ТулГу и ТГПУ. Так исторически сложилось, что в этих университетах есть мощная математическая школа, специализированные курсы по параллельным вычислениям и алгоритмизации, машинному обучению, базам данных и многому другому. Все эти курсы проводят ведущие IT-компании города, и у обучающихся есть уникальная возможность почерпнуть новые для себя знания. Кроме того, все региональные хакатоны проводятся только на базе этих двух вузов.
Выпускнику технического государственного вуза я не рекомендую повышать свою квалификацию в других школах, университетах и т.д. У будущего сотрудника есть все, чтобы обучиться самостоятельно. Это будет и быстрее, и дешевле. Единственное, второе образование по английскому языку точно пригодится, т.к. большинство качественных статей написано на нем.
Чтобы устроиться работать в компанию, необходимо составить резюме и откликнуться на вакансию, указав, что нет опыта, но есть большое желание учиться и развиваться. Я уверен, что большинство компаний с пониманием отнесутся к начинающему разработчику и предоставят курсы для самостоятельного обучения.
Я рекомендую использовать три источника:
книги (только те главы, которые вам порекомендовали, целиком читать не надо, это не даст никакого результата);
специализированные статьи и курсы;
информация от технического специалиста, с которым в компании установлен контакт.
Последнее лично для меня ценнее всего: подсказка или совет от ведущего разработчика или руководителя отдела дорогого стоит. И побольше решения практических задач – одна теория не даст глубокого понимания происходящих процессов.
Разумеется, от новичка никто не будет требовать никаких сверхъестественных знаний, однако строчка о дополнительном образовании по релевантной специальности будет плюсом. Как минимум, она послужит доказательством вашей заинтересованности в конкретной технологии, осознанного выбора профессии и желания в ней развиваться.
Если сверхъестественных знаний не требуется, то какие все-таки нужны? Конечно же, сам по себе никакой диплом не играет роли, если вы не способны продемонстрировать то, чему научились. Поэтому иногда даже собеседования на стартовые позиции сродни экзамену. Вот что обычно нужно знать, если вы устраиваетесь в компанию с серьезными требованиями к кандидатам:
В бэкенде от новичка важно понимание клиент-серверного взаимодействия, основ алгоритмизации и языков программирования, умение работать с базами данных. Обычно на собеседовании предлагается решить две задачи на алгоритмизацию. Одну – легкую, из лабораторных работ вуза – для понимания того, что студент выполнял их самостоятельно и не списывал у друга. И вторую – сложнее, из сборников олимпиадных задач по программированию – для проверки аналитических способностей и умения находить нестандартные подходы.
Обязательны вопросы по основам ЯП, объектно-ориентированному программированию, а также специфические вопросы по конкретному языку программирования. Базы данных – основы реляционной алгебры.
В случае фронтенда необходимо знание основ верстки, наличие небольшого проекта, написанного на одном из современных JS-фреймворков: Angular, React или Vue.js.
Поскольку основным языком для фронт-разработки остается язык JS, могут задать каверзные вопросы этого необычного ЯП. Ну, и алгоритмизацию никто не отменял. Многие считают, что во фронтенде нет алгоритмических задач. Придется расстроить этих людей: все там есть, пусть не в таком масштабе, как в бэкенде.
В случае с состоявшимися специалистами на собеседованиях часто оцениваются их разработки. Сделать выводы о квалификации новичка сложнее, поскольку, как правило, у них нет готовых проектов в портфолио.
Тем не менее, отсутствие опыта работы не означает, что вы не можете попробовать себя в ряде проектов и улучшить ими свое резюме.
Часто бывает, что выпускники выполняют работу только так, как их научили. Для того, чтобы новичок смог узнать больше и поработать с реальными проектами, и существует практика или стажировка, где студенту стараются показать, что мир IT на порядок шире его познаний, и дают направление в сторону правильного развития. Это поможет понять, какие действия надо совершить, чтобы в будущем стать профессионалом в своей области.
Например, в нашем тульском филиале мы проводим круглогодичную стажировку для студентов технических специальностей. Стажеры под руководством тимлидов участвуют в работе над реальными проектами компании: собственными и клиентскими. Мы даем представление об Agile и Waterfall, учим командной работе и нашему стеку технологий: C#, ASP.NET MVC/Core, MS SQL Server, PostgreSQL, Elastic Search, MongoDB, Redis, Aerospike, Clickhouse, Xamarin, React Native, RabbitMQ, Docker, Octopus, React, Vue и Angular JS.
Теперь что касается проектов, в которых можно поучаствовать. В нашей компании много крупных долговременных проектов, которые разрабатываются годами. Команды в них могут достигать 30 человек.
Работая с подобными проектами, начинающий разработчик знакомится с новыми для себя парадигмами разработки. Например, он впервые узнает, что для того, чтобы выполнить какую-либо задачу, ее надо оценить и в процессе выполнения не выскочить за пределы оценки. Т.е. подобному тому, как он решает задачу на экзамене или контрольной и ограничен во времени, в реальной работе тоже есть своеобразный таймер.
Новичок узнает, что каждая задача имеет свой жизненный цикл, что это своеобразный конвейер, от качественного взаимодействия звеньев которого зависит успех. Также для многих стажеров часто становится открытием, что весь код хранится в облаке, в системе контроля версий, и что выход из рабочего состояния компьютера или затирание чужого кода (случайное или намеренное) не влечет за собой ручное восстановление.
Дипломная работа – это не просто необходимый этап обучения, чтобы получить документ о высшем образовании. Она вполне может стать вашим первым проектом, который даст шанс привлечь внимание работодателя.
Как выбрать тему, чтобы она была интересна всем: и преподавателям, и работодателям? Она должна быть в рамках программы вашего вуза (одна из тем, предложенных преподавателями), сложной (с технической, математической или какой-либо другой точки зрения) и с применением актуальных IT-парадигм, которым вы обучились самостоятельно. Простой дипломный проект, реализованный на React, но не имеющий никакой сложности, конечно, может быть интересен потенциальному работодателю, однако преподавателей не удивит и на оценке проекта будет холодно воспринят. Поэтому идеальный вариант – совместить сложные вычисления с написанием интерфейса на том же React, например. IT-области, которые особенно привлекают как преподавателей, так и работодателей – это machine learning и data science.
Качественно реализованный проект всегда выглядит как магия. Выпускники с такими работами имеют огромное преимущество при устройстве на работу.
Периодически в крупных городах проводятся хакатоны для разработчиков и студентов, где участникам предлагается разработать практические решения для тех или иных задач.
На студенческих хакатонах задачи могут быть разного характера: из реальных проектов (как это делает наша компания), придуманные интересные задачи и связанные с современным программированием.
На таких мероприятиях у студента появляется уникальная возможность проявить себя. Можно взять незнакомую интересную для себя тему и быстро изучить ее. Во время хакатонов часто налаживаются контакты с ведущими разработчиками крупных IT-компаний – а советы и подсказки от них, как я писал ранее, ценнее всего. Также можно узнать о работодателях, проектах, которыми они занимаются, и решить для себя, где было бы интересно работать. Как правило, командам, которые заняли призовые места, всегда предоставляется бесконкурсная стажировка в той или иной компании.
В заключение, хотел бы остановиться на трендах. Сфера IT непрерывно развивается: появляются новые технологии, специальности, все очень быстро устаревает. Поэтому программист как никто другой должен постоянно отслеживать все новое в отрасли, чтобы оставаться востребованным. Что это означает для новичков?
Необходимо смотреть на глобальные тренды, крупные проекты и рынок труда в IT, чтобы понимать, какие профессии, направления и технологии будут наиболее перспективными и высокооплачиваемыми в ближайшем будущем. В 2020 году это, например, узкопрофильные data-специалисты, сильные backend-разработчики высоконагруженных проектов и frontend-разработчики со знанием Angular, React или Vue.js
Чтобы быть более конкурентоспособными на фоне тех, чьи знания ограничиваются университетским образованием, расширяйте свой кругозор, изучайте современные технологии самостоятельно и пробуйте себя в реальных проектах. Чем быстрее вы выйдете за рамки, тем скорее станете профессионалом в своей области.
Демонстрируйте свои знания. Как я уже упомянул выше – впечатление о новичке часто складывается просто на основе диалога. Потенциальный работодатель всегда отметит кандидата, в котором видит стремление изучать новое и развиваться.