Сначала тебе нужно определиться с тем, чем именно ты хочешь заниматься. Ты хочешь заниматься фронтенд-разработкой приложений, создавая и разрабатывая пользовательские интерфейсы? Ты хочешь разрабатывать связующее программное обеспечение, реализуя бизнес-правила и логику? Или ты хочешь стать бэкенд-разработчиком и работать с базами данных и низкоуровневыми операциями? Ты можешь выбрать все три варианта и стать фулстек-разработчиком, но в таком случае тебе нужно определиться с определенным стеком технологий. Например, фулстек-разработчик может специализироваться на создании ASP. NETMVC сайтов, используя С# и SQL Server.
Ты также можешь выбрать специализацию в области разработки встроенных систем: тебе придется работать с аппаратными устройствами и писать код, который будет выполняться внутри компьютера. Такие программисты решают задачи совершенно непохожие на задачи веб-разработчиков.
Еще одна специализация – это операционные системы. Бо́льшая часть разработчиков пишут приложения и программы для определенной операционной системы, например Windows, UNIX или MacOS.
Разработка мобильных приложений или разработка мобильной операционной системы – это тоже потенциальная область специализации. Спрос на разработчиков, занимающихся написанием приложений на iOS или Android, очень высок.
Некоторые программисты становятся специалистами, работающими с очень специфичными платформами или фреймворками. У таких разработчиков не так много рабочих мест, но зато они могут ставить на свои услуги высокий ценник. Ты заметишь, что низкоуровневые специальности включают в себя работу с очень дорогими платформами или фреймворками. Давай рассмотрим это на примере крупной немецкой компании SAP. Некоторые высокооплачиваемые сотрудники специализируются на разработке решений для клиентов и их реализации в этой системе ПО.
Области специализации:
• стек веб-разработки;
• встроенные системы;
• определенные операционные системы;
• разработка мобильных приложений;
• фреймворки;
• системы ПО.
Большинство разработчиков, которым я рассказываю о пользе специализации, соглашаются со мной; однако я часто получаю вопросы о том, как именно выбирать специализацию. Очень часто эта задача вызывает затруднение.
Ниже несколько вопросов, которые помогут тебе определиться со специальностью.
• Какими были основные проблемы компании, в которой ты работаешь или работал? Можешь ли ты стать тем человеком, который способен решить эти проблемы?
• Есть ли работа, которую никто не хочет выполнять? Есть ли недостаток хороших специалистов? Стань экспертом в этой области, и ты получишь множество предложений о работе.
• Какие темы чаще всего обсуждаются на конференциях или пользовательских группах?
• Если ты сидишь на сайтах вроде Stack Overflow, то на какие вопросы тебе приходится отвечать чаще всего? С какими проблемами сталкиваются твои коллеги?
Что бы ты ни делал, убедись, что ты выбрал определенную специализацию. Размер рынка поможет тебе понять, насколько узкой она может быть; постарайся сделать эту область максимально узкой. Тогда спрос на твои услуги будет намного выше. И не волнуйся: если будет нужно, ты всегда можешь сменить специализацию. Например, я больше не специализируюсь только на разработке ПО для принтеров. Я также знаком со множеством разработчиков, успешно сменивших свою специальность.
Например, мой хороший друг Джон Папа (John Papa) изначально специализировался на Microsoft Silverlight. Спустя несколько лет, когда он ушел из Microsoft Silverlight, он начал работать с одностраничными приложениями.
Каждый раз, когда я затрагиваю тему специализации, я встречаю сопротивление. Думаю, здесь необходимо уточнение: хоть я и рекомендую иметь специализацию, это не означает, что тебе не нужно иметь и развивать другие навыки.
Тебе может показаться, что эти два утверждения противоречат друг другу, но на самом деле это не так. Быть эрудированным и разносторонним разработчиком очень хорошо. Способность использовать разные программы, технологии и языки программирования сделает тебя более ценным специалистом. Но очень сложно позиционировать себя как мастера на все руки.
Очень удобно иметь разработчика, который может выполнить любую работу, но обычно клиенты или компании ищут других людей. Хотя ты отлично знаешь все виды программ, технологий и владеешь 50 языками программирования, тебе все равно необходимо выбрать специализацию. Ничего страшного, если со временем ты поменяешь ее.
Учись столько, сколько сможешь, и стань гибким специалистом, но всегда имей специализацию, делающую тебя особенным и уникальным. Если ты не можешь выбрать между двумя вариантами, то начни с того, на чем ты специализируешься именно сейчас; ты можешь изменить свое решение в любой момент.
• Перечисли разные виды специализаций для разработчиков ПО, которые представляют для тебя наибольший интерес. Начни от широких и постепенно сужай специализации. Сколько специальностей получилось выделить?