«C++ за 21 день», или разбираемся, как начать карьеру разработчика

May 20, 2019
Blog

Решив связать свою жизнь с IT-сферой, мы задаёмся вопросом: «С чего начать?». И вроде начинать нужно с выбора языка программирования, но тут будущие программисты делятся на две категории: тех, кто определился с профессией в детстве/юности, и тех, кто собрался “входить в айти” уже в зрелом возрасте. Чем отличаются их подходы? Какие 4 правила помогут не потратить время зря и стать ценным специалистом?

Конечно же, те, кто столкнулся с программированием в нежном возрасте, находятся в более выгодном положении: выбор был сделан за них. Эти люди начинали с простейшего, с азов, осваивая на уроках и в различных кружках Turbo Pascal, Delphi и другие, ныне неактуальные языки с простым и доступным синтаксисом. В более сложной ситуации находятся люди, которые в зрелом возрасте решили сменить профессию и стать разработчиками программного обеспечения. Ведь времени на многолетнюю возню с пет-проджектами и «Hello, World!» у них уже нет, да и в кружок «Юного техника» уже не походишь. Именно о взрослых, решивших сменить сферу и стать разработчиками ПО мы и поговорим.

В одной из прошлых наших публикаций мы говорили, что выбор языка программирования для конкретного проекта определяется конечной сферой применения продукта. Это же правило применимо и к людям, то есть начинать надо не с выбора языка, а с выбора сферы деятельности в рамках разработки. Вот только начинающие программисты этот вопрос почему-то зачастую игнорируют. Сформулировать его можно так: «В какой части IT-сферы вы хотите работать?». Большинству людей недостаточно просто солидной заработной платы, хотя она является серьезным мотиватором к освоению искусства программирования. Для успешной самореализации на стезе разработчика требуются и определенные склонности, причем для разных сфер эти склонности серьезно отличаются.

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

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

Что самое печальное, люди, далекие от разработки, но желающие стать частью IT-сегмента в качестве девелоперов, иногда не отдают себе отчета в том, чем же занимаются те или иные команды. Например, очень многие мечтают работать в геймдеве, не понимая, что за все «крутые фишки» игр, которые так любит публика, отвечают не программисты, а гейм-дизайнеры, аналитики и сценаристы. Девелоперы лишь реализуют их задумки в корректно работающих строках кода. Либо же так любимое массами тестирование. Казалось бы, что такое тестирование? Потыкать в кнопки, проверить поля ввода данных, задокументировать ошибки. Но это лишь азы — вершина айсберга — ручное (мануальное) тестирование. На самом же деле QA-ветка разработки намного более обширна и сложна, если мы говорим о профессиональном росте и самореализации в этой сфере. Потому что кроме мануального тестирования добавляются различные методики (black/white box тестирование), автоматизация, элементы аналитики при тестировании UI и UX и даже специализация на вопросах этики интерфейсов и UX программного обеспечения и веб-продуктов.

Если очень сильно утрировать, у каждого начинающего девелопера есть два пути: работать над ПО или веб-проектами.

Первый путь — старейший и классический. Написание программного обеспечения — это искусство, доступное далеко не всем, а опытные и талантливые разработчики ПО никогда не останутся без работы и очень высоко ценятся на рынке труда. Но у этого пути есть и подводные камни — в первую очередь тут требуются уже опытные девелоперы, которые четко понимают, что они делают. Второе — в разработке ПО используются такие сложные для освоения языки как C, C++, C#, Objective-C/Swift, Java, временами Python, конечно же .NET. К этому списку можно добавить еще десяток менее популярных языков и целое море фреймворков, так что он на самом деле огромный. Молодым разработчикам на этом пути достаточно тяжело, но итоговая награда стоит труда. Вопрос в том, что далеко не каждый выдержит путь от зеленого новичка до матерого синьора, который будет по-настоящему ценен на рынке.

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

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

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

Суть выражения выше заключается в следующем: каждый разработчик начинает с чего-то простого. Конечно, можно ознакомиться с биографией известных людей и узнать, что когда-то они начинали свой путь с ассемблера или C, но нужно понимать, что двадцать лет назад языков программирования было в разы меньше, а технологии — не такими совершенными. Раньше у программистов не было такого широкого выбора, а количество эффективных в коммерческой разработке ЯП можно было пересчитать по пальцам. Некоторые из этих языков используются до сих пор — тот же C/C++, но кроме них появились и получили распространение намного более простые в освоении ЯП. Например, тот же PHP или Python.

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

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

Тезис третий: ваш первый язык программирования станет базисом вашего языкового стека.

У каждого разработчика есть свой стек языков программирования, фреймворков и технологий. Нужно четко понимать, что стек — дело наживное. Чаще всего каждый последующий освоенный разработчиком язык и фреймворк — это своеобразный кирпичик в многогранной башне знаний девелопера. Предположим, сначала вы осваиваете PHP и начинаете заниматься веб-разработкой на этом языке. После вы развиваете свои знания — появляется новый проект, который кроме PHP использует еще и JavaScript. К языкам добавляются какие-то стандартные библиотеки и фреймворки и вся эта совокупность знаний по одному направлению и формирует ваш стек технологий, в основе которого лежит ваш самый первый язык программирования. Конечная цель любого девелопера — стать так называемым full-stack разработчиком. Кто такие full-stack? Это девелоперы, которые освоили все основные языки и фреймворки по своему направлению деятельности.

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

·Разработка frontend/backend на Python/Django.
·Владение Python и Django Framework.
·Владение JavaScript и его фреймворками, CSS, HTML.
·Опыт работы с СУБД. Владение SQL.
·Опыт разработки веб-приложений.

Тут видно два основных языка программирования в стеке: Python для бэкэнд части и JavaScript для фронтэнда. Django, CSS, HTML и владение SQL — это вторичные требования, которые показывают, с чем придется иметь дело в рамках работы.
Грамотный выбор первого языка программирования, на котором в дальнейшем будет строиться ваш стек — крайне важный шаг. Например, не стоит сразу браться за изучение весьма популярного Ruby, ведь любой Ruby-девелопер должен на высоком уровне владеть родственным JavaScript. При этом в вакансии PHP-девелопера вы никогда не увидите требование к владению ассемблером или C/C++ (а если увидите — бегите как можно дальше от такого работодателя). При этом разработчику на C++ или C# с ничтожной долей вероятности когда-нибудь понадобится PHP или знание CSS, просто потому что эти сферы разработки не пересекаются между собой и, строго говоря, этим языкам в стеке C-девелопера делать особо нечего. Конечно, у вас может быть несколько стеков, но достигается это десятилетиями работы и задумываться новичку о таком ни в коем случае нельзя.

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

1. Решить, в каком сегменте IT-сферы вы будете работать: в вебе или разработке ПО.
2. Выбрать один из основных языков вашего направления разработки.
3. Изучить его на должном уровне, закрепив практикой на реальном проекте.
4. Строить свой собственный стек языков и технологий на базе выбранного языка.

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

Удачи.

Previous articleNext article