Работа над сложными IT-проектами никогда не совершается в одиночку: всегда есть команда специалистов, каждый из которых осуществляет свою часть работы. В этой команде существует определенная иерархия должностей, от рядовых разработчиков до руководителя проекта. Давайте попробуем в этой иерархии разобраться.
Начинающие программисты обычно начинают с позиции разработчика — Developer или Software Engineer (SE). При этом даже внутри разработчиков существует своя иерархия. Вчерашним выпускникам с минимальным опытом работы приходится начинать с позиции Junior SE (то есть младший разработчик), но по мере накопления опыта можно дорасти до SE (Middle SE), а потом и до Senior SE (старшего разработчика) .
В описаниях вакансий обычно также указывается язык программирования, которым должен владеть соискатель на определенную должность, например, Junior Java Developer, Senior C++ Developer и т. п. Благодаря этому уже по названию должности можно понять главные требования к соискателю: язык программирования и профессиональный опыт.
При этом старший разработчик должен не только хорошо знать соответствующий язык, но и уметь принимать определенные решения, касающиеся выбора оптимальной в каждом конкретном случае версии языка, среды разработки, компилятора и т. п.
Помимо разработчиков, над проектом работают и другие специалисты, в частности, тестировщики ПО и специалисты по обеспечению качества (Quality Assurance Engineers, QA-инженеры). Границы между этими двумя должностями смазаны, однако различия все-таки есть.
Задача тестировщика — проверить готовый продукт на несоответствие требований и наличие ошибок и задокументировать найденные ошибки. А задача QA-инженера — не только непосредственно тестирование. Он планирует тестирование и анализирует его результаты, ищет способы улучшить процесс разработки ПО и предотвратить дефекты.
Таким образом, тестирование — это лишь узкая специализация в рамках QA. В компаниях с небольшим штатом QA-инженер может выполнять функции тестировщика, а в крупных компаниях эти должности часто разграничены. У QA-инженеров, как и у разработчиков, есть своя иерархия: Junior QA, Middle QA, Senior QA и т. п.
Отдельно стоит упомянуть такую должность, как QA Automation Engineer, эти специалисты занимаются автоматизацией тестирования. QA Automation Engineer — это своего рода «гибрид» QA-инженера, тестировщика и разработчика. Он должен обладать знаниями в области как ручного тестирования, так и разработки.
Также в проекте могут быть задействованы такие специалисты, как технические писатели (Technical Writers, Technical Authors). Технические писатели занимаются написанием различной документации, как внутреннего назначения, так и предназначенной для конечных пользователей ПО (руководства пользователя, справочные системы и т. п.). Технический писатель должен, с одной стороны, хорошо владеть языком, с другой — разбираться в технической стороне вопроса.
Разумеется, в каждой команде должны быть руководители, координирующие процесс. Существуют различные руководящие IT-должности, в их числе Project Manager, Software Architect, Team Lead, Tech Lead.
Project Manager (менеджер проекта) осуществляет управление проектов в целом: расставляет приоритеты, планирует выполнение задач, отвечает за организацию работы в команде, оперативное решение проблем, коммуникацию с заказчиком и т. п. По сути, менеджер проекта — не техническая должность, но знание технических нюансов необходимо, без него нельзя эффективно организовать рабочий процесс. Многие PM в прошлом были тестировщиками или разработчиками, а потом решили уйти в управление. Но случается и по-другому: на должность Junior PM берут человека без технического образования, зато с опытом менеджмента, и обучают его техническим нюансам.
Если организационная деятельность PM'а направлена на менеджмент, то Software Architect (архитектор ПО) координирует именно техническую сторону процесса. Он должен иметь целостное видение будущего продукта и на его основе уметь находить оптимальные решения как с точки зрения команды, так и с точки зрения заказчика. В архитекторы ПО обычно уходят старшие/ведущие инженеры, которые не хотят отдаляться от технических задач.
Должности Team Lead (руководитель команды) и Tech Lead (технический руководитель) — это нечто среднее между проектным менеджером и архитектором. Оба выполняют и менеджерскую, и техническую роли, однако у тимлида акцент сделан на менеджмент (коммуникация и организационные вопросы), у техлида — на техническую часть.
Обычно должности Team Lead и Tech Lead занимают ведущие разработчики, которым пришла пора двигаться дальше по карьерной лестнице, но они не могут определиться, что их привлекает больше — менеджмент или техническая сторона. После некоторого времени работы в должности Team/Tech Lead специалист становится либо менеджером проектов, либо архитектором ПО.
Еще одно отличие тимлидов и техлидов от проектных менеджеров и архитекторов ПО состоит в том, что зачастую тимлиды/техлиды координируют не весь проект, а лишь какой-то его аспект. К примеру, QA Tech Lead руководит группой QA-инженеров и отвечает непосредственно за тестирование и обеспечение качества.
Для того чтобы эффективно спланировать процесс разработки, руководителям команд необходимо знать, в чем конкретно нуждается заказчик. Сбором такой информации занимается бизнес-аналитик. Его задача — исследовать проблему заказчика и составить подробный список требований для разработчиков, то есть техническое задание. Бизнес-аналитик должен хорошо разбираться в предметной области, иметь аналитическое мышление и уметь находить общий язык как с заказчиком, так и с командой разработчиков.
Вышеперечисленные должности касаются в первую очередь разработки ПО, но в IT-сфере существуют и другие направления деятельности. Так, в сфере разработки игр востребованы геймдизайнеры которые разрабатывают правила, стиль и дизайн компьютерных игр. Геймдизайнер имеет общее видение игры, которое он должен донести до программистов и художников. В крупнобюджетных проектах есть иерархия геймдизайнеров — ведущий дизайнер, дизайнеры миссий (квестов, уровней), дизайнеры контента и т. п.
В разработке сайтов не обойтись без верстальщиков и дизайнеров. А для того чтобы решать проблемы, возникающие у пользователей конечного продукта, существуют специалисты по поддержке пользователей. Такая должность может называться Desktop Support Engineer, Technical Support Engineer.
Также нельзя не вспомнить о специалистах, которые обеспечивают стабильную работу компьютерного парка. Это в первую очередь всем известные системные администраторы (System Administrators), без которых невозможно нормальное функционирование информационной инфраструктуры.
В небольших компаниях системный администратор — «на все руки мастер», у него есть масса обязанностей — от решения проблем пользователей до работы с сетями. Но в крупных компаниях обычно работают несколько категорий системных администраторов в зависимости от выполняемых задач: администратор баз данных, администратор сети, системный инженер (системный архитектор), администратор безопасности сети и т. п.
Можно упомянуть и ряд «околоайтишных» должностей, которые не связаны непосредственно с разработкой. Это, например, менеджеры по продажам (Sales Managers) и рекрутеры (HR). Человек, работающий на такой должности, может не иметь технического образования, но при этом должен разбираться в технической стороне вопроса настолько, насколько это необходимо для эффективного выполнения обязанностей.
К примеру, HR может не уметь программировать самостоятельно, но он должен разбираться в базовых понятиях, чтобы суметь проанализировать резюме соискателей и понять, кого из них стоит приглашать на собеседование с техническими специалистами, а у кого шансов нет изначально. А менеджер по продажам не сможет эффективно продавать продукт, если не знаком с его особенностями и потребностями целевой аудитории.
Высшая руководящая должность в IT-сфере — это технический директор (Chief Technical Officer, Chief Technology Officer, CTO). Он отвечает за оптимизацию производства в целом, координацию работы руководителей отдельных команд, внедрение и поддержку новых процессов внутри компании, разработку новых продуктов или сервисов. Как и все топ-менеджеры, CTO отвечает не за конкретный продукт, а за компанию в целом.