Написать пост

Как стать программистом, которого хотят нанять — отвечают эксперты

Аватар Никита Прияцелюк

В условиях жёсткой конкуренции программистам нужно постоянно развиваться, чтобы их заметили. Узнаём у экспертов, как привлечь к себе HR-ов.

Рынок всё больше наполняется программистами. В условиях такой конкуренции хотелось бы как-то выделиться среди остальных, желательно так, чтобы HR-ы сами тебя искали. О том, как этого добиться, мы спросили у экспертов.

Прим. ред. Это комментарий нашего читателя ВКонтакте. Он решил поспорить с выводами к этой статье, получилось аргументированно, предлагаем прочитать.

По фактам:

«Любите то, что делаете. Энтузиазм позволит вам развиваться за пределами работы и получать больше навыков».[/quote]

Bullshit. Компании ваш энтузиазм не нужен. Энтузиазм — это повод возложить на вас ещё больше работы за ту же зарплату, а также путь к тому, чтобы делать вещи, о которых вас не просят (и потом сильно удивляться, почему вас не понимают). Любить и относиться с энтузиазмом к IT в целом — хорошо и правильно, однако это не должно распространяться на работодателя. Если вашему работодателю так хочется видеть в рядах сотрудников инициативных и активных — лучше изобразить это, чем по факту таковым становиться (в конце я объясню почему).

«Следите за актуальными технологиями в вашей сфере».

Но отсеивайте bullshit, а то через 10 лет окажется, что вы знаете с десяток технологий, которые когда-то были пару месяцев на слуху и ими пользуются 3,5 анонимуса в 2,5 проектах. Чаще задавайте себе вопрос, почему та или иная технология сыровата, спрашивайте себя, какие проблемы она решает, а какие создаёт, и если технология создаёт больше проблем, чем решает — не тратьте своё время на неё, сколько бы денег в моменте за её знание ни предлагали. Да, я не отрицаю, что круто изучить блокчейн и биткоины и затесаться разработчиком в криптостартап, но держите в голове, что после того, как вы получите свой кэш, а стартап закроется из-за падения курса, — вы окажетесь вновь у необходимости искать работу и переквалифицироваться.

«Не останавливайтесь на каком-то одном направлении/языке/технологии/etc. Расширяйте свои знания как вглубь, так и вширь».

Bullshit. Твёрдое знание основ — прежде всего. Покуда мир поголовно не переехал на биологические носители информации и квантовые вычисления (что, при всём уважении, едва ли случится в ближайшие 40 лет) — понимание, как работают индексы и сортировки, будет востребовано. А в остальном лучше знать и уметь одну технологию на уровне «эксперт мирового класса», чем поверхностно знать 50 языков и фреймворков, быть мистером «пальцы-во-всех-пирогах». К тому же, к 30 годам вам порядком надоест расширять круг знаний.

«Участвуйте в соревнованиях по программированию. Призовые места помогут привлечь к себе рекрутеров».

Bullshit. Работодателям, по правде говоря, мало интересно, где и какие грамоты вы получили, а недавний разбор протокола Telegram на Хабре наглядно показывает, какие продукты получаются у олимпиадников и победителей конкурсов. Тратьте время на соревнования и хакатоны только ради нетворкинга (знакомств с полезными людьми).

«Развивайте soft skills: учитесь работать в команде, делиться информацией, просто общаться».

Ух… soft skills. На моей памяти чаще всего под soft skills подразумевается навык говорить именно то, что люди хотят услышать, что проходит в опасной близости от «умение войти в доверие к нужным людям». Хотите практиковать такие игры — воля ваша. Но лично я бы порекомендовал поизучать вместо этого практическую психологию. А для начала — сходить к хорошему психотерапевту и вылечить свои психологические болячки (поверьте, скорее всего они у вас есть). Окунувшись в это, вы поймёте, что делать дальше.

«Не бойтесь ответственности и тяжёлых задач».

…но только если уверены, что этот праздник жизни будет замечен, оценён и оплачен. В противном случае избегайте ответственности и тяжёлых задач.

«Научитесь эффективно доносить свои мысли до других. Для практики можете, например, завести блог».

Чтобы выбросить его на свалку истории через пару месяцев. Блог — это подача, раскрутка, маркетинг. А вы не маркетолог, неа. Лучше всего люди читают статьи развлекательного характера, а технические подробности мало кому интересны — для этого есть StackOverflow. Кстати, зарегистрируйтесь там и попробуйте поотвечать на вопросы. Это действительно хороший опыт.

«Участвуйте в разных митингах и конференциях. Но не только как слушатель, но и как докладчик. Хорошие доклады, принятые аудиторией, также привлекают внимание рекрутеров».

Bullshit. Внимание рекрутёров привлекает отфильтрованный список людей в LinkedIn, горящие сроки закрытия вакансии и внутренние CRM-ки агентств по найму. Навык public speaking это круто, если метите в менеджмент. В остальном на конференции приходят за нетворкингом. И чем больше телефонов/email’ов полезных и интересных людей вы унесёте с конференции, тем лучше. А в какой роли вы участвуете в мероприятии — докладчик или слушатель — несущественно. Помните, что самое интересное происходит в кулуарах.

«Регулярно выделяйте время на обучение».

А лучше — используйте ресурс работодателя, чтобы учиться. Как бы то цинично ни звучало, поверьте, от него не убудет.

«Поработайте над резюме, особенно если у вас нет опыта работы и резюме толком нечем наполнить».

Лучше начать с запроса «how to write resume» в YouTube и посмотреть часов 50 видео на эту тему, чтобы действительно понять, как это делать. В написании резюме есть свои сложившиеся традиции, устоявшиеся формулировки, форматы, запрещённые слова и обороты — короче, это тоже своеобразная «специальная олимпиада» (особенно в США). Навык написания резюме и ваши профессиональные качества — это совершенно ортогональные вещи.

«Научитесь смотреть на задачу с разных точек зрения, чтобы понимать, чего хочет бизнес и пользователь».

Bullshit. Если вы не UX-специалист и не аналитик, то научитесь понимать, чего от вас хочет ваше непосредственное начальство. И его начальство. И начальство его начальства. Выбросите из головы всякие мысли «а сколько будет стоить обслуживание этого?», «а понравится ли такое пользователям?», «а сколько денег эта фича принесёт компании?». Это всё чушь, муть и компот. Чтобы думать о бизнесе — у бизнеса есть учредители. И пока вы не в совете директоров и у вас не акций компании или доли в уставном капитале — ну, вы поняли. Думайте, чего от вас хочет непосредственное начальство. По моему опыту, мало кого увольняют за низкую квалификацию и баги. И уж точно никого не увольняли по причине «сделал не то, чего хотели наши пользователи». А вот за «не вписываешься в команду» и конфликты с руководством — таки сплошь и рядом.

Первое и самое важное — забудьте про страх ответственности. Если вы хотите быть лучшим, значит, вы берёте на себя все риски и принимаете решения за себя и, если позволяют должностные обязательства, за других людей. Вы не будете расти и двигаться вперёд, если всегда за вас кто-то будет решать, что делать. Забудьте про то, что есть какие-то специально обученные люди, которые должны делать «эту» работу, тем более если они не входят в разряд ваших подчиненных. Если вам что-то нужно для достижения какой-то цели, не следует ждать, пока кто-то что-то сделает. Делайте это сами, ведь в первую очередь это нужно вам. Очень часто мы слышим фразы «это не входит в мои обязанности», «это не моя зона ответственности». Про эти фразы тоже забудьте — чем больше вы берёте на себя, тем быстрее растут ваши знания и навыки.

Развивайте свои коммуникативные навыки наравне с техническими. Очень хорошо, когда вы умеете писать красивый, хорошо читаемый и документированный код, придумывать интересные и оптимальные алгоритмы. Но, боюсь, что только это не позволит вам получить признание кого-либо больше, чем ваших ближайших коллег и вашего непосредственного руководителя. Ведь одной из составляющих успеха является ораторское искусство. Многие люди думают так: «Работает и хорошо». Но ваша задача — заставить людей понять ваше решение и восторгаться им, а для этого нужно правильно преподнести его публике.

Приведу пример из собственной практики. Как-то директор департамента (одного крупнейшего сотового оператора) попросил меня составить недельный отчёт и презентовать ему то, что мы сделали за минувший период. Мы тогда уже успешно внедрили mission critical систему, о которой он и хотел послушать. Писать в отчете рутину, которой мы занимались, на тот момент не имело смысла. Да и в глазах директора это могло показаться слишком малым достижением. Поэтому в отчёте я написал только одну строчку: «Успешно разработана и внедрена интеллектуальная система мониторинга метрик предоставления качества услуг». По сути это была небольшая утилита, которая залезала в базу и снимали статистику по прохождению бизнес-процесса. Но что увидел директор? «Интеллектуальная» — очень модное на тот момент слово, и «Метрики предоставления качества услуг» — то, что на его должности волнует его больше всего. Как следствие, это «достижение» пошло по вертикальной иерархии вверх и принесло нам больше известности, чем внедрение всей системы.

И ещё: если вы стоите на пороге выбора, в какой компании начинать работу, то тут особо много думать не следует. Вам имеет смысл рассматривать компании, у которых много проектов, в которых постоянно что-то бурлит и что-то меняется. В противовес этому я бы не стал рекомендовать начинать свою карьеру с крупных корпораций. Там вы завязнете на одном проекте, очень быстро наберёте все знания, которые может дать этот проект, и потом вам придется менять работодателя, чтобы расти дальше. Поэтому лучше начинайте карьеру либо в компаниях, занимающихся стартапами, либо в компаниях-интеграторах. Это позволит вам быть на пике технологического стека.

Самое главное — учить и начинать. Без этого прогресса не будет. Постоянно задавайте себе этот вопрос: что нового я выучил за день, за неделю, за месяц? Что я хочу начать, но откладываю или боюсь?

Окружите себя командой более сильных людей. Ищите коллектив, который будет заставлять вас развиваться: со сложными задачами и коллегами, которые уже добились того, к чему вы стремитесь. Работа среди опытных и целеустремленных открывает новые горизонты: так вы узнаете о митапах, на которые раньше не ходили, конференциях, куда раньше не ездили, обязательных к прочтению книгах и новых курсах.

Уделяйте внимание нетворкингу в профессиональной среде: так вы узнаете о вакансиях «для своих» и будете в курсе того, какие навыки сейчас востребованы на рынке. Спрашивайте новых знакомых, в какую сторону они планируют развиваться, что изучают, над какими проектами работают. Делайте выводы.

Регулярно выделяйте время на обучение. Выделите время на неделе и разбирайте непонятное, проходите курсы. Выучите новый язык программирования, который даст дополнительный инструментарий для задач, которые вам интересны (хороший программист знает 2–3 языка). Пройдите курсы по data science, чтобы из рядового разработчика стать специалистом по работе с данными.

Изучайте английский: так вы сможете читать новости американского рынка — именно там рождаются тренды, которые затем приходят к нам. С уверенным английским вы сможете смотреть обучающие курсы ведущих университетов мира и без проблем разберётесь с документацией к языку или проекту.

Прокачивайте soft skills: они важны и при приёме на работу, и для карьерного роста. Все крутые продукты сейчас делают команды, поэтому умение продуктивно общаться с людьми становится необходимым навыком. Без умения работать в команде, адекватно воспринимать критику и доносить свои идеи до коллег вряд ли получится стать частью действительно масштабного проекта.

В работе беритесь за те задачи, которые кажутся сложными: именно они приводят к скачку в навыках.

Позволю себе немного уточнить поставленный вопрос. Быть лучшим программистом и быть специалистом, за которым будут охотиться работодатели — это всё-таки разные цели. Программист — достаточно узкая специализация, его обязанность — реализовывать требования, описанные в техническом задании, используя один из языков высокого уровня. И лучший программист — тот, кто справится с этой задачей наиболее быстро и качественно. Как видим, это далеко не предел развития.

Поэтому, если хотите, чтобы за вами охотились работодатели — не останавливайтесь на уровне лучшего программиста, а развивайтесь дальше: в специалиста в области информационных технологий, которому под силу как спроектировать полноценную информационную систему, так и реализовать задуманное, возглавив команду.

Ниже мои рекомендации, как стать таким специалистом:

  1. Начинайте свою карьеру в небольшой компании — там больше возможностей для развития. Как показывает практика, путь от рядового программиста-разработчика до архитектора и технического руководителя в небольших компаниях проходят быстрее.
  2. Не стойте на месте, расширяйте круг решаемых задач. Не бойтесь ответственности.
  3. Работайте в команде, обменивайтесь опытом со своими коллегами.
  4. Не переставайте учиться. Расширяйте кругозор и совершенствуйте свои навыки. Возьмите за правило хотя бы 1–2 раза в год посещать профильные конференции по интересующим направлениям.
  5. Обязательно пройдите курс по технике эффективной презентации. Умение доносить свои идеи и мысли до других — один из ценнейших навыков. Заведите свой технологический блог, а также найдите возможность хотя бы время от времени выступать с докладом на конференциях.

Сразу скажу: стать даже «средненьким» программистом без опыта реальной работы невозможно. К тому же, не стоит считать средний уровень чем-то зазорным — не такой уж он и плохой. Даже если вы просто работаете программистом и у вас что-то получается — это само по себе уже хорошо.

Многие известные личности, которых принято считать гениальными программистами, на самом деле писали программы (возможно, и не самого высшего качества) только в самом начале своей карьеры, а в дальнейшем продолжили свой профессиональный путь в качестве топ-менеджеров созданных ими ИТ-компаний, да и вовсе не качество кода определяло их успех — скорее, умение управлять командой, вовремя поступившие инвестиции и самое обыкновенное везение.

Попасть в лапы HR-ов крупных корпораций достаточно легко, если иметь опыт от 1–3 лет. Другое дело, что техническое собеседование проводят вовсе не HR-ы. Как бы они ни хотели вас «захантить», решать, нужны вы фирме или нет, будут другие профессионалы — как правило, программисты с опытом.

Если вы в самом начале карьеры, и проблемы именно в том, что вы не можете привлечь HR-ов, то стоит предпринимать такие шаги:

  • Проходить курсы программирования. Причем не один, а хотя бы несколько. И не параллельно, а последовательно, чтобы информация хорошо отложилась в голове. Если вы начинающий программист без опыта работы, но у вас есть в резюме сертификаты о прохождении курсов, то HR это обязательно оценит.
  • Принимать участие в соревнованиях по программированию. Если получить одно из первых мест в крупном соревновании, то можно привлечь внимание рекрутеров крупных корпораций.
  • Лучший программист — это не тот, кто в одиночку делает большие проекты. Это программист, который умеет работать в команде. А это не так-то просто, как кажется: здесь в цене soft skills. Если HR видит, что вы не умеете ладить с людьми, не настроены на позитив и не умеете находить компромисс при командной работе, то он вас скорее всего забракует.
  • Улучшать резюме как самостоятельно, так и пользуясь услугами профессионалов — они объяснят тонкости оформления резюме и помогут расставить правильные акценты. Особенно это актуально в том случае, если нет опыта работы и резюме особо нечем заполнить.
  • Посещайте конференции, митапы, дни карьеры, хакатоны — не только в качестве зрителя, но и в качестве участника. Обычно на таких мероприятиях присутствуют HR-ы из разных компаний. Либо они вас заметят, либо вы их.

Если вам хочется, чтобы за вами охотились хедхантеры крупных технологических компаний вроде «Яндекса», Mail.ru или «Авито», то, на мой взгляд, сосредоточиться надо будет не только на навыках программирования.

Для ясности: если ваше хобби — олимпиады по программированию и вы там занимаете призовые места, то у вас и так есть предложения о работе, дальше можно не читать.

Очевидно, вы должны писать работающий код, разбираться в основных паттернах проектирования и иметь представление о ключевых алгоритмах, их сложности и применимости. Всё это не так уж сложно, требует прочтения пары актуальных книг по вашему языку и классических трудов Дональда Кнута.

Дальше — самое интересное: вы начинаете делать себе имя.

Подумайте, в чём ваша сильная сторона.

  1. Вы можете грамотно представить результаты своего труда?
  2. Претендуете на место лидера и чувствуете, что с вами команда сворачивает горы?
  3. Ваш педагогический талант превращает «джуниора» в «синьора» за полгода?
  4. Вы так любите программирование, что занимаете этим всё свободное время?

Ответив для себя на эти вопросы, можно начинать думать в нужном направлении.

Первый пункт даёт вам возможность заявить о себе на тематических конференциях и митапах. Хороший, насыщенный доклад, благосклонно принятый аудиторией, обязательно привлечёт к вам внимание рекрутеров, которые всегда присутствуют на таких мероприятиях.

После какого-то количества успешных выступлений вас могут пригласить в программный комитет. Весомое имя в отрасли, репутация среди лидеров индустрии, и вуаля: лучшие офферы — у вас.

Второй и третий пункты не требуется громко озвучивать на конференциях. Просто сослуживцы, которые потом переходят в другие места, рассказывают о вас новым коллегам. Так возникает репутация несколько другого плана, которая тоже может обеспечить интересную и ответственную работу.

А любовь к программированию означает, что рано или поздно вы примкнёте к сообществу Open Source, начнёте изменять популярные и известные продукты и нарабатывать себе репутацию высококлассного специалиста (и высокий рейтинг на GitHub). Большинство крупных технологических компаний поддерживают собственные продукты с открытым исходным кодом и готовы предложить работу людям, которые помогают их развивать.

Напоследок замечу, что работа в крупнейших мировых компаниях потребует от вас хорошего разговорного английского. Чем раньше вы начнёте вкладывать силы и время в этот навык, тем больше шансов на успех. И мозги развивает!

Я думаю, что основа успеха в любой специальности — это интерес к делу. Поэтому для того, чтобы быть хорошим программистом, в первую очередь надо любить программировать. Это одновременно и мотивация, и «топливо» для постоянного роста, который просто необходим. ИТ-сфера очень активно развивается: одни технологии сменяют другие, появляются новые области применения и т. д. Нельзя один раз освоить какой-то набор знаний и больше ничем не интересоваться. Очень скоро такой программист теряет привлекательность на рынке труда в качестве специалиста. Поэтому огромную роль играет самообразование. Благо, что интернет сейчас позволяет передавать и получать знания в любой доступной форме — статьи, подкасты, видеообзоры и уроки.

Ещё одна важная ступень на пути становления лучшим программистом — это умение работать в команде, делиться информацией, выслушивать критику. Бытует заблуждение, что программист — это одиночка, который целый день пишет код и ни с кем не общается. Так или иначе во время работы программист взаимодействует с другими программистами, будь это команда в проекте или свободное сообщество. Плюс к этому, конечным пользователем программного обеспечения как правило является человек и надо понимать, чего он хочет. Таким образом от умения взаимодействовать с людьми и понимать их желания напрямую зависит, будет ли программный продукт правильно выполнять возложенные на него задачи.

В качестве старта в области программирования могу посоветовать определиться с тем, чем хотелось бы заниматься. Попробовать запустить сайт, написать простую игру, разработать какой-то инструмент. Также будет полезно принять участие в проекте с открытым исходным кодом, разобраться в нём, предложить свои изменения — это сформирует навыки работы с чужим кодом. Список востребованных технологий и навыков всегда можно сформировать для себя, просмотрев текущие открытые вакансии на рынке труда. Очень хорошо, если удастся в самом начале карьеры устроиться работать на должность джуниора или стажёра в крупную компанию с командой опытных разработчиков и спокойно набираться опыта. К сожалению, это возможно не всегда по разным причинам. Тогда можно найти работу, где можно совмещать трудовые обязанности с программированием или заниматься написанием каких-то проектов в свободное время. В любом случае, имея за плечами хотя бы год активной разработки, найти вакансию по душе будет намного проще.

Что касается HR-ов крупных корпораций, то, мне кажется, тут всё просто. Надо проявлять себя в жизни сообщества, выступать на конференциях, писать статьи и делиться своим опытом, можно принять участие в разработке и развитии каких-нибудь open-source проектов. Всё это будет не только полезно для собственного развития, но ещё даст наглядное представление о признании достижений конкретного специалиста со стороны других программистов, тем самым повысив его привлекательность в глазах потенциальных нанимателей.

Изучайте принципы, а не языки программирования

Время идёт, всё меняется, популярные некогда языки и методологии устаревают. Вот почему важно концентрироваться на базовых принципах, а не постоянно гнаться за модой. Наверное, один из способов — глубоко изучить как минимум два разных языка.

Участвуйте в open-source проектах

У open-source проектов много преимуществ:

  • это и опыт работы в распределённой команде;
  • почти всегда более зрелые практики разработки и ревью кода;
  • возможность попробовать себя в новой сфере и стеке технологий;
  • опыт разработки продукта, которым пользуются реальные люди.

Да, это потребует времени, но взамен даст бесценный опыт и заметно обогатит портфолио.

Умейте говорить «Нет»

Зрелого программиста от юного часто отличает именно это качество. Каждому программисту приходилось работать в режиме сжатых сроков, и зачастую под давлением руководства нам хочется взять на себя чуть больше, чем мы способны совершить. Важно понимать, что это лишь откладывает решение проблемы на будущее, создавая у всех ложные ожидания. Лучше сказать «нет» сейчас, и вместе попробовать найти решение, чем согласиться на невозможное и потом подвести себя и коллег.

Не выполняйте задачу, решайте проблему

Умный программист быстро и качественно решает поставленную ему задачу. Мудрый же программист разбирается, какую проблему пользователя или проекта должна решить та или иная задача, и в этом контексте ищет решения. Очень часто разработчик может найти более изящное решение, если полностью понимает детали.

Старайтесь работать с людьми сильнее себя

Это не всегда заметно, но нас формирует окружение. Всеми силами старайтесь окружить себя людьми, которые сильнее вас в тех сферах, где вы хотели бы развиваться, и не бойтесь спрашивать совета. Так, день за днём вы незаметно для себя будете впитывать опыт, который не всегда можно прочитать в книгах и статьях.

У каждого программиста своя мотивация и цель в построении карьеры. Однако не все программисты знают, какие качества отделяют их от долгожданного повышения, и как стать лучшим. Вот несколько простых, но работающих советов.

  1. Любите то, что делаете. Наверное, первое, что видишь в успешных сотрудниках — страсть к своей работе. Делая то, что мы любим, мы не просто выполняем какую-либо задачу, подобно роботам, а оставляем в коде частичку себя: можем часами сидеть и подбирать размеры отступов на сайте, редактировать и форматировать код, превращая серый набор строчек в произведение искусства, словно мы художники, которые пишут картины. Но зачастую не так просто найти вдохновение, благодаря которому работа становится по-настоящему интересной. Из этого вытекает следующий пункт.
  2. Экспериментируйте. Если подойти к сотрудникам, которые сидят годами на одном месте, и узнать, что они хотели бы изменить в своей работе, чтобы она им понравилась, то вряд ли они смогут сформулировать чёткий ответ. И самая частая причина — это незнание. Незнание технологий, других проектов и, как следствие, незнание, из чего можно выбирать. Если по какой-либо причине вы замечаете в себе это качество, значит, пришло время для экспериментов. Попробуйте расширить глубину своих знаний: почитайте о современных технологиях, паттернах, посмотрите на смежные обязанности. Уверен, буквально за день можно кардинально перевернуть своё мнение о проекте. Вы можете улучшить свой проект, внедрив в него новые технологии или переквалифицироваться (вдруг вы устали от баз данных, и в вас проснулся UX-талант, или наоборот). Даже если вы нашли ту самую технологию, но применить её в текущем проекте не представляется возможным — переходите в проект с ней или примите участие в создании нового проекта.
  3. Будьте незаменимы. Давно прошли те времена, когда программист творил какую-то неизвестную магию. В наше время практически на любой вопрос можно найти ответ в интернете. Поэтому лучший программист будет не просто программистом. Быть тем человеком, который пишет код, не просто, и это понятно – мы учимся буквально каждый день на протяжении многих лет, чтобы в конечном счёте код стал продолжением наших мыслей. И сотрудников, которые разговаривают с системами на «ты», не так много. Однако, тех, кто не боится отвечать за себя, за коллег, или же за целый проект, ещё меньше. Если вы хотите, чтобы вас заметили, — выйдите из зоны комфорта и начните отвечать за себя, начав писать такой код, к которому не задаст вопросов даже самый опытный ревьювер. Начните отвечать за коллег, помогая им в решении ежедневных головоломок.

На какой бы вы позиции ни находились — вдохновляйтесь, находите самое интересное в своей профессии, помогайте коллегам и, конечно же, растите. И тогда вопросов о том, как перейти из средних в лучшие, у вас не останется!

Существует огромное количество списков «что должен прочитать джуниор/миддл/фулстек/и т. д. разработчик», в которых перечислены полезные книги, статьи и прочая техническая информация, которую действительно стоит знать. Но есть ещё некоторые вещи, которые нужно подтянуть, чтобы выделиться на фоне остальных кандидатов и упростить себе жизнь в целом.

Нужно уметь решать задачи, а не закрывать тикеты. Это утверждение близко по смыслу с известным «делать не равно сделать», но я подразумеваю несколько большее, чем просто доделывание задачи до формального результата. За каждой задачей в конечном счёте стоит какая-то проблема, которую требуется решить, и не всегда это вообще необходимо делать путём написания кода. Где-то предложить более подходящее решение, где-то настроить окружение, где-то вообще отговорить заказчика от этой затеи, но в конечном счёте решить проблему так, чтобы максимальное количество вовлеченных оказались довольны.

Для предыдущего тезиса также крайне полезно умение взглянуть на задачу с других точек зрения, как бизнеса, так и пользователя. Обычно такое требование предъявляется к специалистам по QA, поскольку это их основная задача, но у программиста в данном случае есть преимущество: он может ещё на этапе получения задачи или обсуждения проекта увидеть проблемные или непродуманные места и вытащить их на свет до того, как на реализацию будут потрачены месяцы.

Продолжая тему задач, хотелось бы озвучить ещё один важный навык — это умение эти самые задачи ставить. В большинстве компаний переход из middle- в senior-разработчика подразумевает не только изменение уровня сложности или спектра задач непосредственно по программированию, но и получение под своё руководство некоторого количества людей. И если заранее не тренироваться в постановке задач, то можно запросто забуксовать на этом месте, получая вагоны негатива и от менеджеров, и от команды. К счастью, этот навык тренировать проще предыдущих, ведь вся работа программиста — не что иное, как попытка поставить задачу очень тупому, но исполнительному работнику: компьютеру. Сам по себе это весьма обширный и многогранный вопрос. Насколько детально описывать задачу, где дать самому искать решение, где дать готовое и многие другие нюансы — всё это будет выясняться с опытом, но минимальное умение поставить задачу так, чтобы исполнитель в итоге сделал то, что нужно — это жизненно необходимое умение.

Ещё один навык, который поможет программисту в работе и жизни — знание русского языка и в общем грамотная речь. Да, звучит странно. Вы же читаете этот текст и понимаете, что тут написано? Но количество людей, которые действительно грамотно пишут, а также способны последовательно и понятно донести свои мысли до аудитории, сильно меньше, чем количество людей, которые просто понимают русский язык.

Когда я только начинал работать программистом, да и вообще изучать программирование, я был свято уверен, что без знания английского разработчиком не стать. Прошли годы, появилось множество учебных материалов на русском языке, и, как следствие, появилось множество разработчиков, которые не знают английского. Но я всё же до сих пор уверен, что английский язык для разработчика — обязательный пункт в списке навыков. Если вы не планируете уезжать за рубеж или работать на иностранную компанию, то не обязательно иметь британское произношение и читать Шекспира в оригинале, но уметь читать документацию, сообщения и обсуждения на английском, а также правильно задавать вопросы хотя бы в Google нужно уметь каждому.

Итак, книги прочитаны, какие-то проекты сделаны, опыт есть, предыдущие пункты освоены в той или иной мере, что делать дальше? Пробовать. Брать и делать. Нельзя стать лучше, просто почитав книги или статьи, но не сделав ничего на практике. Нужно ставить эксперименты, ломать и чинить обратно проекты, совершать ошибки и учиться этого не повторять. Как нельзя научиться держать равновесие ни разу не упав, так же и не получится делать проекты хорошо ни разу не сделав плохо. Можно долго спорить о парадигмах, паттернах и подходах, но не попробовав их в деле и не набив шишек об углы, вы не сможете выбрать, что использовать в новой задаче. Так что из двух в общем одинаковых разработчиков я бы предпочел взять в команду того, который наступил на большее число граблей и при этом научился не наступать на них второй раз. В агентстве всегда есть возможность получить огромный опыт работы (а значит, и «граблей» тут много) над разными проектами и задачами. Поэтому попробуйте себя в агентстве, а потом уже никакие клиенты вам будут не страшны.

Последнее, что я бы хотел посоветовать разработчику — это обуздать своего внутреннего перфекциониста. В реальном мире прикладных задач обычно нет цели написать идеальный код за неидеальное время (потому что идеальное время выполнения большинства задач с точки зрения клиента — вчера). Лучшее, что может сделать программист: написать максимально понятный и поддерживаемый код, решающий поставленную задачу, за время, которое на эту задачу было выделено.

Чтобы попасть на стажировку в большую компанию, нужно знать алгоритмы, то есть структуру данных. Если ты не знаешь базовые алгоритмы, связанные с графами (хотя бы мапы, сеты, какие-нибудь хэштеблы, связанные списки), тебе будет очень некомфортно.

Благодаря стефу и проектному опыту я хорошо понимаю, как работают системы. То есть, запуская свой сайт, я знаю, как работают все его части, начиная от HTTP-запроса до конечного бэкенда, который я написал. Когда ты приходишь в большую компанию, то пишешь не весь код, а только его часть — однако для этого необходимо понимать, как при этом это всё работает целиком.

В программировании много разных сфер, в которых нужны совершенно разные навыки. Я сейчас разработчик в основном на C++. Мне важно глубоко знать язык, причём не 97 стандарт, а следить за нововведениями, не отставать от развития самого языка. Кроме этого, важно понимать, как это всё работает на низком уровне: в ОС, в процессоре и так далее. Всегда нужно следить за последними и самыми актуальными технологиями в своей сфере. В университете посещайте курсы не только по языку программирования, а также по разным фреймворкам и парадигмам разработки. Например, высоконагруженные системы, параллельное программирование и так далее. Универсального рецепта нет: развивайтесь как в глубину вашего направления, так и в ширину (по технологиям программирования).

В моём случае сильно помогло олимпиадное программирование. Оно сильнейшим образом «вправляет» мышление, сильно меняет то, как ты вообще смотришь на задачи любой сложности, и учит их решать.

Диплом олимпиады помог мне попасть в хороший вуз (по ЕГЭ вряд ли бы поступил), а там благодаря уже выработанному умению держать стресс и жёсткую нагрузку, смог выдержать программу и начать хорошо учиться.

По окончанию первого курса я подал заявку на летнюю стажировку в Google, прошёл отбор благодаря олимпиадам, и начал набираться опыта.

Суммируя, надо уметь быстро разбираться в любых процессах, выдерживать психологическую нагрузку, и набираться практического опыта.

Для начала карьеры стоит хорошо выучить один язык и научиться решать на нём любые алгоритмические задачи. На собеседованиях в крупные компании на начальные позиции в основном спрашивают именно об этом — как в России, так и за рубежом. В тех же Google, Facebook и Microsoft больше ничего другого и не спрашивают. Стоит также знать матанализ / теорию вероятностей, потому что по жизни они в любом случае пригодятся.

Начинайте работать там, куда вас возьмут. Поначалу многие компании даже не будут вас рассматривать из-за маленького резюме. Этого бояться не надо, надо просто накапливать опыт.

Остальные нужные знания придут с опытом. Не бойтесь задавать вопросы на работе (но не такие, на которые можете ответить сами). Умейте быстро читать чужой код и искать в нём что-то, нужное вам. Пользуйтесь дебаггером, ищите похожие проблемы в поисковике. И конечно же, хорошо общайтесь с коллегами.

Начинать карьеру в ИТ лучше всего ещё во время обучения. Многие вузы предоставляют старшекурсникам возможность участвовать в интересных ИТ-проектах и проходить практику в крупных технологических компаниях. Стажировки дают представление о том, как реально работает бизнес и какую роль в нём играют технологии. Кроме того, это хорошая возможность проявить себя и закрепиться в компании мечты или познакомиться с интересными техниками, которые используются в компаниях. Например, существует техника, когда программисты сменяются друг за другом — один работает над кодом 10–15 минут, а второй стоит у него за спиной и наблюдает за процессом. Таким образом они изучают код друг друга и проверяют ошибки. Не стоит бояться браться за сложные кейсы, потому что именно они нарабатывают ваш опыт.

Если вуз не реализует программы стажировки, необходимо искать возможности вовне — как можно больше интересоваться трендами рынка, общаться с однокурсниками, преподавателями, одним словом, воспринимать вуз как площадку для нетворкинга, расширяя сеть будущих профессиональных контактов. Важно понимать, что знания, полученные в вузе — это только фундамент. Навыков работы на базовых языках программирования будет недостаточно, чтобы попасть в топовую компанию сразу после окончания учебного заведения. К тому же, ИТ-сфера настолько быстро развивается, что к моменту получения диплома ваши знания могут попросту оказаться устаревшими.

Чтобы стать первоклассным программистом, необходимо очень много учиться, причём постоянно. В сфере информационных технологий большое количество самоучек, обладающих необходимыми компетенциями для работы на высокооплачиваемых должностях. Если вы планируете последовать примеру таких программистов, сконцентрируйтесь на современных и наиболее востребованных языках программирования. Например, можно заняться изучением low code programming (визуальным программированием) на различных платформах (мы используем OutSystems) или развивать себя в области robotic process automation (RPA) — технологии автоматизации бизнес-процессов, использующая программных роботов, имитирующих действия человека для выполнения рутинных задач. В нашей компании RPA сейчас активно развивается на платформе Blueprism. Также сейчас набирают популярность мобильные разработки, исследования в области больших данных, интернета вещей и машинного обучения. Мы считаем, что за этими направлениями будущее.

В процессе самостоятельного образования немаловажным будет участие в мероприятиях. Сегодня проходит множество различных форумов и конференций, где ИТ-гуру делятся знаниями и профессиональными советами. Для наработки опыта очень полезны хакатоны, они проводятся при поддержке крупных компаний, которые впоследствии внедряют предложенные командами решения в свои бизнес-процессы. Такой формат мероприятий становится всё популярнее. Например, в конце сентября в России состоялся самый крупный в мире хакатон — финал конкурса «Цифровой прорыв», где приняли участие более 3000 специалистов со всей страны. В таких мероприятиях в условиях жесткого временного ограничения (обычно это 36 или 48 часов), специалисты учатся создавать рабочие продукты, оттачивают свои цифровые компетенции, и, что немаловажно, получают опыт работы в команде.

Для программистов сегодня большой проблемой является развитие soft skills, а ведь именно они помогают эффективно взаимодействовать с другими людьми. Эти навыки дают возможность лучше понимать бизнес-процессы, своих заказчиков или коллег. Современный программист должен отходить от представления о том, что он просто пишет код, дистанцировавшись от всего остального мира. Любой специалист — это в первую очередь член команды agile, команды DevOps. Да, в компании должен быть product owner, менеджер проектов, но нельзя забывать, что и программист тоже является членом этой команды, которая работает в постоянном контакте друг с другом и с заказчиком.

Идеальный вариант — сформировать основу фундаментальных знаний в области computer science в самом начале карьеры, а потом выбрать вектор дальнейшего развития и идти в выбранном направлении, подстраиваясь под изменения рынка и требований, овладевая новыми технологиями и инструментами, а также развивая soft skills. Но такое бывает редко.

Если это не ваш случай, то не всё потеряно. Кроме профессионального владения основными навыками для вашей специальности, большое значение имеет ваш кругозор и понимание, как устроен мир вообще и бизнес в частности.

Что ещё имеет значение: педантичное отношение к коду, чтение профессиональной литературы, умение и желание самостоятельно искать ответы на сложные вопросы, квалифицированный ментор, общение с командой единомышленников, участие в соревнованиях по программированию. Значимый проект в виде собственного сайта, open-source приложения или обучающей программы добавит смысла в ежедневную рабочую рутину.

Помните, что HR-специалист не всегда может оценить в полной мере профессиональные способности кандидата, но всегда обратит внимание на его амбициозность, адекватность и мотивированность. Для любого профессионала, и программисты тут совсем не исключение, важны человеческие качества: доброжелательность, общительность и способность к самоиронии. Умение слаженно работать в команде, сопереживать и поддерживать коллег, признавать и исправлять ошибки.

Могу сказать, что в первую очередь для нас важны способность мыслить аналитически и умение работать в команде, ответственность, здравый смысл и навыки тайм-менеджмента. При найме на такое мы уделяем внимание опыту работы соискателя, хотя, конечно, технический бэкграунд приветствуется. Технологии очень быстро меняются, и опыт работы в определённой области — не всегда залог успеха. Поэтому очень сложно посоветовать, что именно нужно выучить, чтобы стать востребованным специалистом. Сейчас важна обучаемость и целеустремленность, а также желание развиваться. Конечно, мы предоставляем сотрудникам множество инструментов развития, но если на этапе отбора мы не видим желания развиваться, то это может насторожить. Человек, работающий в сфере IT сегодня, должен посещать специализированные группы, смотреть онлайн-IT-конференции, читать блоги разработчиков для собственного развития, пробовать писать свои проекты.

Если вы начинаете свой карьерный путь с нуля, то могу посоветовать начать работу в компании, где есть стажировки и которая предоставляет инструменты развития.

На самом деле секрет успеха прост: если специалист способен выдавать качественный результат на постоянной основе, то он точно будет востребован на рынке труда. При этом понятие качества может включать много параметров — например удобство использования разработанных систем или соблюдение сроков работы.

В программировании, как и любой другой сфере, на первое место выходят увлечённость и энтузиазм, специалисты, которые «горят» своим делом, профессионально развиваются в свободное от работы время — а потому обладают большим практическим опытом.

Однако умение хорошо программировать — не всегда главное. Ответственность, умение критически относиться к себе и своей работе ценятся выше: таким сотрудникам можно доверять, делегировать полномочия. И эти качества не зависят от уровня квалификации или числа отработанных лет — это заложено в способе мышления.

Но есть и навыки, которые можно развивать — к примеру, умение «чувствовать задачу». Хороший специалист понимает, когда стоит углубиться в детали, а когда важнее просто оперативно решить вопрос. При проектировании новой системы можно стать перфекционистом и ещё на начальном этапе продумать все нюансы. А вот с «боевыми» задачами всё иначе: здесь важнее выполнять их своевременно, иногда в условиях ограниченных ресурсов.

Чтобы стать лучшим программистом (как, наверное, и в других профессиях тоже), надо научиться смотреть дальше своих конкретных задач. Вы можете выбрать развитие либо в технологическом направлении, либо уделять больше внимания бизнес-проблемам. Но в любом случае — полезно смотреть на задачу шире, чем требуется для её простого выполнения, и изучать смежные области.

Такой взгляд позволит вам лучше окружающих понимать, куда движется тот или иной проект или в каком направлении развивается технология, и предлагать и реализовывать собственные новые идеи. На мой взгляд, это основное, что отличает лучшего программиста от «середнячка».

Итак, как стать лучше и привлечь внимание рекрутеров?

  • Любите то, что делаете. Энтузиазм позволит вам развиваться за пределами работы и получать больше навыков.
  • Следите за актуальными технологиями в вашей сфере.
  • Не останавливайтесь на каком-то одном направлении/языке/технологии/etc. Расширяйте свои знания как вглубь, так и вширь.
  • Участвуйте в соревнованиях по программированию. Призовые места помогут привлечь к себе рекрутеров.
  • Развивайте soft skills: учитесь работать в команде, делиться информацией, просто общаться.
  • Не бойтесь ответственности и тяжёлых задач.
  • Научитесь эффективно доносить свои мысли до других. Для практики можете, например, завести блог.
  • Участвуйте в разных митингах и конференциях. Но не только как слушатель, но и как докладчик. Хорошие доклады, принятые аудиторией, также привлекают внимание рекрутеров.
  • Регулярно выделяйте время на обучение.
  • Поработайте над резюме, особенно если у вас нет опыта работы и резюме толком нечем наполнить.
  • Научитесь смотреть на задачу с разных точек зрения, чтобы понимать, чего хочет бизнес и пользователь.

Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики. Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.

Следите за новыми постами
Следите за новыми постами по любимым темам
18К открытий18К показов