Я только что посмотрел отличное видео с канала Honeypot (подпишитесь на него, если вам нравится контент, посвященный разработке программного обеспечения). Видео представляло собой короткое интервью с Бьярном Страуструпом, создателем C++, возможно, одним из самых влиятельных людей в истории разработки программного обеспечения.

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

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

Чрезмерная специализация

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

На заре разработки программного обеспечения разработчик «мастер на все руки» был более распространен, главным образом потому, что область была относительно новой, а технологии были менее сложными. Один разработчик может отвечать за проектирование базы данных, внутреннюю и внешнюю разработку, развертывание и даже некоторый базовый дизайн UI/UX. Однако по мере развития этой области росла сложность и диапазон необходимых навыков. Современные приложения могут включать алгоритмы машинного обучения, полагаться на облачные микросервисы, использовать технологии контейнеризации, такие как Docker, и требовать передовых интерфейсных инфраструктур, таких как React или Angular. Специализация в одной или нескольких из этих областей…