Не так давно было это. 8 лет назад. Учился я в магистратуре ИТМО на экспериментальном направлении Информационной безопасности. За плечами был уже бакалавриат в области разработки программного обеспечения в другом ВУЗе. Уже успел поработать помощником системного администратором (по факту там настрой, тут спаяй, там протяни). И хотелось погрузиться собственно в разработку. С информационной безопасностью не сложилось, т.к. программа в ИТМО на кафедре ВТ была мягко сказать сырая и без какой либо практики. С этим даже стажером сложно было куда то идти.
Пошел заниматься тем, чем занимался еще со школы - Web разработкой.
Тут и начались первые трудности - курсов тогда столько не было. Лучше оно или хуже не знаю. Были книги и стажировки. Первой работой стала небольшая Web студия где задача разработчиков была бурная имитация деятельности. Директор набирал в поддержку сайты на любых CMS и самописных движках. Их поддержкой занималось 2 разработчика. По моим подсчетам сайтов было около 80. За каждый бралось 10к рублей за поддержку + разные SEO оптимизации 2-3к (по факту просто закупка ссылок, (тогда так работало)). Разработчики делали все - разворачивали через FTP, настраивали хостинг, покупали домены. Искали фрилансеров для верстки PDF, писали отчеты и ТЗ чтобы заказчик понимал, что какая -то работа делается по его сайтам. Конечно и в фотошопе работали и верстали под браузеры разные. И все это за 10-15к в Спб за полный рабочий день. Никому не советую в таких конторах долго работать (опыта полезного минимум для программиста, как и денег). Пригодились ли тут 2 высших образование - не думаю.
Следующим мне очень повезло найти оплачиваемую стажировку (с обучением) в компании с полноценным ИТ отделом, занимающимся продуктовой разработкой и с этого момента уже я начал расти именно как специалист.
В чем же разница между фрилансом, поддержкой и написанием своих сайтов или работой в Web-студии и работой в продуктовой команде ?
Первое, что понимаешь - очень много есть чему научиться у коллег. От настройки IDE до построения процессов для лучшей командной работы. А самое главное - появляется разделение труда. В продуктовых командах есть выделенные роли. На них остановимся подробнее:
Product Owner (Заказчик) - человек хорошо разбирающийся в бизнесе компании и знающий технические моменты в продукте. Формализует хотелки бизнеса в виде конкретных задач, строит планы, а также устанавливает приоритеты и может оценить сроки и сложность (грубо).
Quality Assurance - (QA или тестировщик) - в некоторых организациях это отдельный отдел, а где то выделенные полноценные члены команды. Встречаю в основном разделение на 2 типа:
- Manual (Ручные) Testers - запускают команды вручную, прокликивают интерфейсы, описывают сценарии для тестирования (тест кейсы). Иногда совмещают с должностью технического писателя. (но это скорее зло)
- Специалисты по автоматизации тестирования - они уже обладают определенными навыками программирования и (как понятно из названия) автоматизируют процесс тестирования. Пишут тесты на различных языках и фреймворках.
Технический писатель - человек хорошо разбирающийся в продукте и в бизнесе. Он создаёт документацию к программам: описывает функции, сценарии использования, возможные сложности и основные ошибки. Как правило нужен если есть несколько сложных программных продуктов и много пользовательской документации, которую нужно поддерживать.
UI/UX дизайнер - проектирует и продумывает пользовательские интерфейсы. Хорошо разбирается в различных подходах в построение интерфейсов под конкретные задачи. Делает наброски макетов или прототипов будущих интерфейсов иногда даже интерактивных. Например в Figma или Sketch. Дизайнер может быть один на несколько проектов, зависит от загрузки
DevOps инженер - автоматизирует и настраивает рабочее и тестовое окружение, CI/CD, может так же отвечать за распределение доступов к серверам и БД и репозиториям, в которых хранится код. Еще занимаются настройкой серверов и мониторинга. Эта роль появилась на стыке разработки ПО и администрирования, поэтому включает в себя часть задач разработчика и системного администратора.
Системный администратор - как правило отвечает за "железо" и офисную инфраструктуру, но может отвечать и за виртуальные сервера и осуществлять контроль за учетными записями и доступом у пользователей. Настройку сетей и т.п.
Разработчик ПО - тут есть деление по языку программирования или области. Например отдельно выделились Frontend и Backend разработчики. Frontend - занимается разработкой клиентской части (то, что видит пользователь). Backend - серверная часть, различные скрипты и бизнес логика скрытая от пользователя. Разработчики мобильных приложений обычно тоже отдельная роль как и 1с разработчик и если в вашей организации все это один человек, у меня для вас плохие новости...
Администратор базы данных, DBA - в больших проектах, когда данных много и нужен порядок и правильная архитектура, выделяется роль DBA. Он отвечает за организацию хранения данных, их эффективное использование.
Для больших проектов еще отдельно выделяют NOC инженеры, Специалисты по машинному обучению, Релиз инженеры и т.п. роли. Так же для взаимодействия с пользователями есть выделенный человек или отдел Customer support.
Вообщем мог и забыть еще кого то, но суть в том, что прошли те времена когда человек оркестр мог эффективно делать все и хорошо. За каждой большой задачей скрывается целый пласт знаний которые не под силу поддерживать в актуальном состоянии 1-му человеку. Эта статья скорее для тех кто работает в мини компаниях или задумался над тем как построить свой продуктовый блок и не знает пока, с чего начать.
Далее постараюсь расписать подробнее про основные инструменты и методологии применяемые в продуктовой разработке. Если интересно - подписывайтесь. Буду рад любым советам и вопросам.