Программист сегодня не то что прежде — одного знания языка (или языков) программирования мало, чтобы быть действительно конкурентным на рынке труда. Ты можешь сколько угодно прописывать в коде на С++ указатель на указатель на указатель, но какой в этом толк, если твой работодатель плачет (менее ванильные ребята орут, лишают премии, угрожают и стоят на стороне клиента — в смысле живого клиента и пользователя вашей программы, а не того, что обменивается информацией с сервером)? Какое-то время назад что гаджеты, что концепции управления, что тенденции подбора персонала тяготели к одному и тому же: модульности, дискретности, а то и даже примитивизации и узкой специализации сотрудников, софта, инструментов. Но эволюция повернула не туда и теперь мир требует умные устройства, которые умеют всё, многофункциональные программы и приложения (привет, Яндекс Go) и, конечно, универсальных специалистов. Концепция «человека-оркестра» вернулась в тренд, не успев уйти из него.
Итак, что вам нужно для полного программистского счастья соответствия набора в конце 2020?
▍ Структуры данных и алгоритмы
Сейчас очень много программистов-самоучек с хорошими скиллами кодинга на конкретном языке программирования. Это переученные с других профилей технари, «вхожденцы в айти», любители самообразования и т.д. они действительно понимают, как писать код, прекрасно разбираются в функциях и синтаксисе, владеют некоторыми фишками, а особо продвинутые вникли в ООП и паттерны. Это уже много для того, чтобы быть конкурентным на рынке труда.
Но в первые же рабочие дни на хорошем проекте начинаются проблемы и становится очевидно, что учебные задачки, которые сделали тебя классным кодером, не имеют ничего общего с кодом в продакшене. Чтобы написать хороший, профессиональный код, нужно разбираться в структурах данных и алгоритмах, уметь проектировать программное обеспечение. Мне приходилось видеть весьма толковых программистов, которые не использовали в работе массивы, деревья, связанные списки, сортировки и т.д. У таких ребят две отличительных черты: 1) они упрямы и уверены в своём превосходстве; 2) они тратят адски много времени на написание того, что уже существует как структура — я видел изобретённые заново сортировки и деревья, это страшно и странно. Молчу уже о ресурсах.
Поэтому программист любого уровня должен легко оперировать структурами и существующими алгоритмами. К слову, HR-специалисты и CIO страшно любят использовать эти темы на собеседовании. Стоит ли превращать собеседование в экзамен, тема отдельной статьи, но факт остаётся фактом.
▍ Бизнес-процессы
Я ещё помню благостные времена, когда можно было создавать продукт своей мечты, а продуктологи, маркетологи, продажники превращали его в продукт мечты клиентов компании. Сейчас, конечно иное: и коммерческие ребята расслабились, и клиент стал разборчивым, и конкуренты научились делать красивые штуки вместо прежних оглоблей на коленке. Сейчас любой программист и любой разработчик должен разбираться в бизнес-процессах, для которых он создаёт программное обеспечение, должен минимально разбираться в сфере деятельности компании. И здесь не пойдут аргументы вроде «Хирург не обязан быть десять раз прооперированным», потому что это подлог аргументации и софистика: хирург, кроме места разреза и конкретного органа, разбирается в анализах, фармакологии, реаниматологии, общей анатомии, физиологии и проч.
И это большая проблема: разработчики создают продукт просто по ТЗ, не ради удобства конкретных клиентов. Поэтому, если вам важно быть эффективным и создавать ценный, продаваемый (для пользы вашей зарплаты) продукт, создавайте его с учётом потребностей клиента, а не с учётом своего взгляда на потребности. Запросите у пользователя требования, соберите информацию о том, как продукт используется, выявите неудобные и удобные модули и функции — тогда получится и лучше, и проще.
Кстати, небольшой лайфхак, как разобраться в бизнес-процессах, ради которых создаётся ваше приложение. Соберитесь с коллегами из «продающей» части, из фронтофиса и проведите взаимный семинар: они вам о процессах и клиентах, о профиле использования и важных преимуществах, а вы им — о том, что разработка — это не палочкой взмахнуть и не «запили мне калькулятор расчёта параметров и стоимости проекта атомной станции за полчасика, клиент очень попросил».
▍ Математика
Царица полей. Ну или наук, не суть. Как бы мы с вами в айтишном мире ни избегали математики, с каждым годом её важность возрастает. Ни машинное обучение, ни нейронные сети, ни искусственный интеллект без знания математики разработать не получится. И если вы, разработчик сайтов или фронтендер, сейчас хмыкнули и пошли читать следующий пункт, остановитесь, это касается всех. Потому что в скором времени программы без хоть каких-то зачатков ML/AI/нейросетей/BigData будут в ряде отстающих. Поэтому, выход простой: пока не поздно, изучайте необходимый срез математики.
У меня есть небольшой секрет, как начать: купить любую продвинутую энциклопедию для детей или научно-популярную книгу о математике и погрузиться в атмосферу, освежить базовые термины. А там пойдёт и даже затянет.
▍ Базовые знания в смежных областях
Этот пункт может возмутить любого, но да — программисту и его коллегам будет лучше, если все они будут чуть больше знать о работе соседа по опенспейсу, кабинету, команде. Если вы программист, вам лучше знать какие-то основы UI/UX, фронтенда и бекенда, системного администрирования, тестирования и т.д. Это позволит выстраивать продуктивный рабочий диалог без взаимных обвинений и подозрений. Не нужно вникать в самую глубину предмета — достаточно базового учебника, онлайн-лекций и интернет-курса. Если вы реально заинтересованы в карьере разработчика, можно пройти какую-нибудь очную программу комплексной разработки ПО — там всё будет дано в умеренных объёмах, правда, чаще всего платно.
Такие «универсальные солдаты» с широким рабочим кругозором легче попадают в число проектных менеджеров и тимлидов. Если вам это интересно, растите вширь и немножко вглубь в плане изучения зависимых дисциплин.
▍ Техно-трио, без которого в будущее не пустят
Может показаться странным, но зачастую программисты знают лишь о существовании этих трёх технологий и могут пояснить, что это такое, в общих словах. Однако, в скором времени эти технологии в той или иной мере коснутся каждого.
- Облачные технологии. Облако — это не только экономия и простая масштабируемость для компаний, это ещё и огромные вычислительные мощности, которые доступны любой компании (а вот собственные сервера на такие мощности практически недоступны по стоимости и сложности управления). За облачными системами наше с вами инфраструктурное будущее. Поэтому понимание и умение использовать Amazon Web Service (AWS), Google Cloud Platform (GCP) или Microsoft Azure гарантированно увеличат стоимость программиста на рынке труда.
- Микросервисы. Микросервисная архитектура решает многие проблемы безопасности, управления и эксплуатации высоконагруженных проектов, работы с огромными базами данных. Микросервисные архитектуры пока востребованы, в основном крупными компаниями, но совсем скоро они шагнут и средний бизнес. Спрос на программиста с таким навыком будет ещё долго (пока наносервисы не изобретут).
- Контейнеры (пока это конкретно Docker и Kubernetes) упрощают процесс развёртывания ПО на проекте, облегчают тестирование приложений и процесс управления зависимостями, гарантируют масштабирование на лету. И самое интересное, что в отличие от микросервисов, контейнеры используют компании любого уровня, поскольку это удобно, просто в изучении и широко распространено.
▍ Софт скиллы не дичь какая-то
Я люблю токсичных сотрудников компаний. Если пиарщица или менеджер проектов нервно поправляет каре и говорит, что в компании «джавист Сергей токсичный», я знаю, что скорее всего джавист Сергей угнетает коллег своим объёмом знаний, профессионально находит ошибки и из лучших побуждений их занудно объясняет, а из-за раздражения окружающих замыкается в себе и ведёт себя грубовато. Но он профи — и таких немало. Но, увы, люди — существа социальные, с тонко организованной психикой и поэтому не выносят людей без эмпатии, социального вектора и, простите, эмоционального интеллекта. Поэтому пока джавист Сергей морозится и ведёт умные разговоры с гарбадж коллектором, питонист Савелий уже и сеньор, и метит в тимлиды, и побывал на трёх конференциях, и с начальством дружбу водит, и с клиентом на выставку в Барселону летит (вы же уже поняли, что примеры выдуманные и все совпадения случайны, ведь никто в 2020 в Барселону не летит).
Сейчас время коммуникаций, которые чем реже, тем ценнее, поэтому записывайте, что вам нужно прокачать:
- навыки общения, возражения, постановки вопроса и обсуждения;
- умение сопереживать и через сопереживание вытаскивать нужную информацию;
- умение грамотно и доходчиво излагать мысли;
- навыки неформального общения без панибратства и перехода на личности;
- умение отстаивать свою точку зрения.
У меня для вас хорошая новость: большинство из софт-скиллов установлены у человека по умолчанию, нужно просто грамотно из себя вытащить эти навыки. Не ходите к тренерам и коучам, 2-3 базовые книги по организационной психологии, конфликтологии и социальной психологии сделают вас продуманным собеседником.
Вообще, интересно развивается наша жизнь: я сейчас вспоминаю, какими прорывными были Google Glass, как чётко зашли Pokemon Go, как взлетели и тут же рухнули разные системы управления проектами. Это были волны хайпового спроса, спроса на трендах. Поэтому перечисленные навыки программиста в 2020 году кажутся такими «кондовыми»: они долгосрочные, а не на пару сезонов. То есть с ними можно дожить примерно до 2030 года без особого напряга. А остальной мир держится на этих слонах. Ну, а языки программирования, конечно, черепаха под слонами, основа основ.
К чему это мы? С днём программиста, друзья! Вы меняете жизнь к лучшему с помощью кода, вы делаете требования рабочими приложениями, вы читаете ТЗ между строк и знаете, что думает заказчик или тимлид. Любите свою работу, растите над ней и над собой, и пусть не будет пропущена ни одна «;». Всем hello world и меньше багов.