О дефиците кадров в IT уже много лет говорят на всех уровнях от бизнеса до государства, а в последний год это усугубилось отъездом многих квалифицированных специалистов, доля которых, по оценке Минцифры, достигает 10% от общего числа айтишников.
На этом фоне многие решают построить карьеру в IT, особенно учитывая уровень доходов программистов. На этом играют многие онлайн-площадки, предлагающие сделать из водителя такси Python-разработчика за месяц, но даже неспециалисту ясно, что это едва ли возможно. Но как тогда действовать?
Первый шаг – выбрать свой путь. Для этого разберемся, какие у программистов есть карьерные треки:
- Frontend-разработчик – специалист превращает код в графический интерфейс браузера, упрощающий восприятие и взаимодействие с предоставленной на сайте информацией.
- Backend-разработчик – программист, отвечающий за внутреннюю и вычислительную логику веб-сайта или иного программного обеспечения (ПО).
- Разработчик мобильных приложений – программист, который пишет программы для небольших переносных устройств, таких как смартфоны, планшеты и любые другие устройства, использующие наиболее популярные операционные системы Android и iOS, либо менее популярные отечественные аналоги Kaspersky OS и «Аврора».
- Разработчик искусственного интеллекта – программист, создающий сложные компьютерные системы, имитирующие мышление человека. Для их создания нужно хорошее знание математики и сложных алгоритмов.
Так с чего начать обучение? Как выбрать путь в IT человеку, который ничего об этом не знает? Чтобы разобраться в этом, мы поговорили с практикующим разработчиком и преподавателем Академии Информационных Систем Андреем Тазетдиновым.
Справка. Андрей Тазетдинов – профессиональный FullStack Engeneer. Два года проработал в качестве Team Lead в кипрской компании Exinity, еще два года был Senior Software Engeneer в австрийском отделении Dynatrace, а последний год работает Senior Frontend Engeneer / Technical Architect в компании IBM IX и консультирует специалистов крупнейших мировых брэндов в области разработки ПО. Также Андрей преподает в Академии Информационных Систем (АИС) ряд курсов по Java и Python.
Андрей, наверное, самый частый вопрос, который задают экспертам, но все же, возможно ли сделать из условного водителя такси программиста?
Конечно, это возможно. Вопрос лишь, как быстро вы станете разработчиком того или иного уровня. Во многом это будет зависеть от бэкграунда. Если у вас есть хорошая математическая база или околопрограммистское, инженерное образование, разумеется, вам будет проще войти в профессию. Но это не значит, что все остальные абсолютно безнадежны. Все будет зависеть только от вашего упорства и желания научиться.
В первую очередь людям, которые хотят сменить профессию, необходимо перестать стесняться, так как каждый сам для себя определяет, что для него успешный уровень. Исходя из этого, мы можем легко сказать, что да, любой человек может сменить специальность на разработчика и сам для себя определить, насколько успешен он в этой области.
От чего стоит отталкиваться при выборе трека?
Трек может быть абсолютно любой. Вы должны определить для себя, чем хотите заниматься и насколько глубоко будете в это погружаться. То есть абсолютно неважно, даже если вы хотите стать главой Google. Естественно, это будет очень тяжело – сменить профессию и добиться больших успехов в американской корпорации, но совершенно нет никаких границ, нет никаких правил, нет никаких барьеров, кроме тех, которые вы сами для себя придумываете. Вы можете сделать абсолютно все.
Хорошо, предположим, мы выбрали направление, которое нам интересно и хотим начать обучение. За сколько реально выучиться на программиста? Неделя, месяц, как обещают на курсах?
Давайте будем честны, за неделю из тракториста в программисты вы не переучитесь, это просто невозможно. Опирайтесь на цифру в год. Примерно год вам понадобится, чтобы сменить одну профессию на другую.
Да, есть случаи, когда ребята справлялись гораздо быстрее, но это зависит от нескольких вещей. В первую очередь это бэкграунд, с которым человек входит. Если у него уже есть техническая или инженерная специальность – ему будет гораздо проще понимать базовые вещи и он быстрее впитает информацию.
Второй момент – мотивация и возможности. Если вы работаете по 8 часов в день и на обучение у вас есть только 1-2 часа, это очень мало. Если вы будете работать час в день и учиться, остальные 7 часов, естественно, у вас будет гораздо мотивации на то, чтобы сменить профессию и вы сделаете это быстрее.
С какого языка лучше начинать?
Тут есть два возможных сценария: вы точно выбрали, чем хотите заниматься в программировании, или нет. Вы хотите разрабатывать игры, искусственный интеллект, делать веб-сайты или мобильные приложения? В зависимости от этого вам необходимо выбирать ровно тот язык и те технологии, которые подходят для этого направления.
Второй случай – когда вы не знаете, чем хотите заниматься, а хотите изучить программирование в целом. Тут идеально подойдут Python, Java или Javascript.
Какие языки программирования наиболее востребованы? Можно ли от этого отталкиваться?
Любой язык программирования на рынке востребован, даже если он кажется полумертвым. Даже на Delphi можно найти очень много вакансий. Если брать не отдельный регион, а смотреть по всему земному шару, абсолютно любой язык будет востребован, если на нем уже написано ПО и оно требует поддержки.
Если же отвечать в целом, на мой взгляд, на данный момент наиболее востребованы Javascript, Python, Java и C++. Это четверка самых наиболее популярных языков программирования, на которых пишется более современное программное обеспечение.
Какие языки программирования Вы не советовали бы изучать?
Нет таких языков – изучайте любые языки программирования. Это все интересно. На старте вам понадобятся базовые вещи – абсолютно любой язык программирования позволит вам разобраться в них. И, зная эти базовые вещи, вы можете переключиться на любой другой язык в течение недели или двух, или трех недель, неважно. Javascript имеет те же самые конструкции, что и С++. Если вы знаете Javascript, и переключаетесь на С++, ничего страшного в этом нет.
Если посмотреть на это со стороны преподавателя. Есть же относительно простые языки, где порог вхождения ниже, и, наоборот, более сложные. Стоит ли давать слушателям что-то попроще или начинать со сложного?
Работа преподавателя не должна состоять из того, чтобы выдавать сложную информацию. Работа преподавателя в том, чтобы мотивировать своих студентов изучать ее самостоятельно. Если мы будем нагружать своих студентов сложной для понимания информацией, мы просто отобьем желание учиться самостоятельно.
Я не говорю, что мы не можем рассказывать, что существует типизация данных, утечки памяти, различные сложные структуры. Это обязательно должно быть предоставлено студентам. Но если закладывать подобный подход как основу образования, это просто отобьет мотивацию.
Для молодых студентов и тех, кто меняет специальность, как правило, нужны разные подходы или это совсем не так?
Принципиальной разницы между ними нет. Ни те, ни другие не имеют ни малейшего представления, что такое алгоритмы, что такое структура данных и так далее. Соответственно, и для тех, и для других информация будет новой, и все будет зависеть только от самого человека: сколько у него времени на изучение, сколько у него мотивации, чтобы учиться самостоятельно. И только это будет важно. А пришел ли он со стороны или переучивается, не имеет никакого значения.
Можно ли начинающему программисту использовать уже реализованные кем-то функции и библиотеки? Или же лучше в начале пути реализовывать все самостоятельно?
Не всегда алгоритм, написанный самостоятельно, будет более качественным и более правильным, чем его библиотечная реализация. Это надо признать. Да, бывают случаи, когда использование библиотеки абсолютно несоразмерно необходимости, но все-таки программирование – это не то, что передается от отца к сыну. Это всего лишь информация, которую мы отдаем как взрослые специалисты младшим специалистам. И если мы, как взрослые специалисты, будем просто критиковать младших специалистов за использование библиотек, это не мотивирует их продолжать обучение, а, наоборот, оттолкнет.
Они должны быть достаточно мотивированы, и в этом есть существенная роль наставника. Мы не должны критиковать их за использование библиотек, но при этом должны научить их писать собственные алгоритмы.
Программисту нужна серьезная математика?
В программировании математика сама по себе нужна. Но математика математике рознь. Если мы говорим о школьной математике, алгебре, какой-то базовой логике – это все необходимо. В любой инженерной профессии нужно знать, что такое острый угол. Но знание сложных логарифмов, каких-то формул и сложных вычислений необходимо всего лишь на двух треках: это создание искусственного интеллекта – там нужна очень серьезная математика – и при работе с компьютерной графикой. Только в этих двух случаях вы будете встречаться с серьезными математическими вычислениями.
Какой совет можете дать человеку, который только начинает заниматься программированием?
Писать код каждый день. Писать код и делиться этим кодом с другими людьми. Это очень важно. Вы должны получать критику каждый день и не должны бояться этой критики. Вы не должны стесняться собственного кода. Это тоже очень важно, потому что если вы будете стесняться своей работы, то никогда не научитесь. Без ошибок никогда нельзя чему-либо полноценно научиться. Если вы не будете писать код, вы никогда не научитесь. Все очень логично. Вот эти три вещи: пишите код, делитесь кодом и не стесняйтесь собственных ошибок.
Если человек не уверен в том, что сможет освоить программирование, специалисты по кадрам в IT часто дают совет пойти в тестировщики? Что скажете на этот счет?
Да, есть такое мнение, что стать тестировщикам легче. Если вы сильно боитесь, что будет тяжело, тогда проще пойти в тестирование. Но надо отдавать себе отчет, что сложно будет везде.
В IT нет такой профессии, которая была бы легкой для освоения и дальнейшего развития в ней. То есть тестирование программного обеспечения будет легче на самом старте, потому что там нет как такового программирования. Но далее, где-то в середине карьерного пути, вы встретитесь с автоматизацией процесса тестирования. И вот там будет достаточно серьезное программирование и достаточно серьезное ПО.
Я не могу сказать, что использование программного кода для тестирования будет легче создания ПО. Для старта, может быть, но в дальнейшей работе будут те же самые сложности. Поэтому выбирайте то, что вы хотите делать, а не то, что легче.
Есть еще такая разновидность разработки как no-code-платформы, то есть платформы, для разработки на которых не нужно уметь программировать. Вроде конструкторов для создания сайтов. Насколько это перспективно?
Этому вопросу уже лет десять. No-code-платформы сильно доминирует на западном рынке. Их очень много, и они уже достаточно серьезно развились. И мне как программисту это очень нравится, потому что это удобный инструмент, позволяющий писать меньше кода. Чем меньше кода я пишу, тем меньше ошибок я совершаю. И это для конечного продукта очень хороший и серьезный шаг.
Полезный бонус no-code-платформ, что на данный момент многие платформы предоставляют открытый API для использования: например, Notion, WebFlow – они используют API, которыми вы можете пользоваться для разработки своих приложений. No-code-платформы хороши еще тем, что позволяют людям без технических навыков реализовывать собственные идеи в разработке ПО – у вас есть идея, нет технических навыков, но вы знаете, как должно работать ваше приложение, какой у него бизнес-процесс и с помощью no-code-платформы вы в несколько кликов сможете создавать приложения и отдавать их конечному пользователю.
Это перспективно и хорошо со всех сторон. Но не стоит бояться, что они отберут работу у программистов – no-code-платформам нужны разработчики. И разработчики, которые сейчас пишут программы, могут писать или поддерживать платформы. Это первый момент.
Второй момент, у no-code-платформ бывает открытый API, и вы можете использовать несколько no-code-платформ, чтобы создать некое приложение, которое будет использовать несколько систем одновременно. Тоже интересный подход.
Напоследок затронем тему трудоустройства. Программисты сейчас востребованы не только в России, но и за рубежом. Вы занимаетесь разработкой уже много лет и имели дело с обеими сторонами. На ваш взгляд, если ли разница между российским и мировым рынками?
Это даже не разница, а глубочайшая пропасть. Все очень по-разному. В России достаточно серьезная проблема именно в управленческих кадрах в IT: они плохо понимают процессы разработки ПО. И второй момент, возможно, это заложенная менталитетом вещь, – у нас очень плохо относятся к критике. Если ты говоришь менеджеру как исполнитель, что мы плохо управляем проектом, что произойдет в этот момент? Менеджер обидится, он не будет улучшать свою деятельность, он не будет улучшать свои процессы, он не будет интересоваться у других людей, как улучшить свои процессы, он просто обидится и даже может начнет тебе пакостить.
Это проблема многих управленцев в IT, с которыми мне приходилось работать. Они не понимают, что для улучшения процесса необходимо говорить о существующих проблемах. Не ставить друг другу палки в колеса, а просто работать вместе. За границей же исполнители, говорят: «У нас плохой процесс». А управленцы им отвечают: «Давайте его улучшим».
А с точки зрения карьеры, требования одинаковые?
Нет, если мы говорим о требованиях к кандидатам, к разработчикам, то очень важно понимать, что западные компании требуют софт-скиллы на том же уровне, как и хард-скиллы. То есть если вы хороший разработчик, если вы пишете очень красивый, грамотный код, это абсолютно ничего не значит, если вы не умеете разговаривать с людьми. Это очень важное умение, потому что работа в команде – это 99% качественной разработки всего программного обеспечения.