Выбор технического стека часто полностью делается вашим техническим директором или другим техническим руководителем. Хотя их мнение должно иметь вес, мнение генерального директора также должно иметь большой вес, поскольку часто недостаточно внимания уделяется влиянию выбранного технологического стека на бизнес.

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

Я намеренно не рассматриваю в этом посте технические достоинства каждого технологического стека, поскольку для этого уже есть много ресурсов. Если бы мы рассматривали только технические причины, мне лично не хотелось бы ничего больше, чем писать все на Rust (даже на фронтенде!), Но сегодня я отбрасываю эти чувства в сторону (а это может быть не полностью в любом случае реалистично).

Почему это важно

Ваш технический стек многое говорит о вашей инженерной культуре потенциальным новым сотрудникам, клиентам и партнерам. Точно так же, как есть много способов иметь очень разные, но одинаково успешные корпоративные культуры, здесь нет правильных или неправильных ответов, только разные подходы.

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

Восприятие

Каждая технология имеет определенное восприятие в технических кругах. Насколько заслужены эти представления - тема для бесконечных споров, но суть остается в силе.

Вообще говоря, языки / фреймворки попадают в следующие широкие категории восприятия:

  • Старый / не крутой - языки или фреймворки, которые существуют уже давно, и большинство инженеров не рекомендуют их для нового проекта. Примеры: PHP, jQuery, ColdFusion.
  • New / Cool - языки или фреймворки, которые являются «новыми и модными». Хотя это часто совпадает с тем, что вы действительно новичок, это определенно не всегда (например, Python попадает в эту категорию, и ему почти 30 лет). Примеры: Javascript (NodeJS), Python, React, Vue, Go, Rust.
  • Корпоративный - языки или структуры, которые предприятия / корпоративные организации широко используют, но имеют плохую репутацию в кругах стартапов. Эта категория наименее объективна и должна рассматриваться с учетом ваших целей как компании. Если вы продаете крупным предприятиям, это может рассматриваться как благо. Примеры: .NET, Java.

Классификация инструментов в зависимости от того, являются ли они «крутыми» или нет, может показаться глупой в профессиональной среде, но это именно то, к чему все часто сводится. В пользу некоторых из этих вещей можно привести объективные аргументы (подробнее об этом в разделе, посвященном исследованиям ниже), но большая часть этого сводится к простым предпочтениям.

Здесь есть много места для совпадений и разногласий, как и следовало ожидать от чего-то столь же расплывчатого, как общественное мнение. Например, Ruby on Rails по-прежнему крутой или нет? Все зависит от того, кого вы спрашиваете. C ++ старый? Это, конечно, в буквальном смысле, но многие люди все еще используют его, и он очень активно поддерживается, поэтому восприятие сильно различается (а в некоторых областях, таких как встроенные системы, C ++ является одним из немногих вариантов, поэтому ситуация более уникальный.)

Инженерное счастье

Для софтверной компании важно привлекать талантливых инженеров, и их технический стек является частью этого. Эмпирические правила для привлечения хороших талантов и поддержания их счастья:

  • Если вы стартап или небольшая компания, ваша культура, вероятно, уже склоняется к соискателям, которые любят решать сложные задачи и узнавать новое, поэтому выберите перспективную новую технологию, которая нравится инженерам (подробнее об этом ниже).
  • Если ваша культура более корпоративная или корпоративная (либо потому, что вы являетесь предприятием, либо вашими клиентами), тогда стремитесь к чему-то более корпоративному, но по-прежнему современному. Инженеры, которым нравится работать в традиционной корпоративной среде, скорее всего, будут более комфортно работать с такими технологиями, поэтому вы сможете лучше ориентироваться в привлечении талантов. Некоторые примеры: .NET Core, Kotlin, современная Java. Однако стоит отметить, что многие предприятия используют такие технологии, как TypeScript и Python. Эта тема очень субъективна.

Кадровый резерв

Вот интересный контрапункт для создания счастья: крутая новая технология, над которой хотят работать инженеры, часто имеет наименьшее количество кандидатов. Например, люди действительно любят Rust, но количество компетентных разработчиков Rust в вашей области, вероятно, очень мало, так что для многих ситуаций, вероятно, слишком далеко в этом направлении. Я рекомендую соблюдать баланс, например: людям действительно нравится TypeScript, и он также широко используется.

Сообщество

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

Самым ярким примером здесь является Python, который широко известен и используется для науки о данных и машинного обучения почти всеми, от Google до любителей. По этой причине большинство людей (включая меня) будут рекомендовать использовать Python для таких случаев использования.

Некоторые языки также способствуют развитию множества не связанных между собой сообществ. Например, C # в первую очередь рассматривается как основной язык, используемый в современной .NET, поэтому сообщество состоит в основном из корпоративных пользователей. Однако это также язык, обычно используемый в игровом движке Unity, поэтому он также широко используется любителями и профессиональными разработчиками игр.

Иногда в этом есть и региональный компонент. Например, в Го есть города с высокой посещаемостью и другие районы с ограниченным использованием. Это может повлиять на ваши планы по привлечению талантов.

Исследование стеков

Вот множество ресурсов и инструментов, которые я считаю полезными для исследования технических стеков:

  • Stack Overflow Trends (https://insights.stackoverflow.com/trends) - это отличный инструмент для изучения тенденций популярности. Однако будьте осторожны с предвзятостью: Stack Overflow имеет очень широкий спектр действий, но у некоторых фреймворков есть другие оживленные форумы поддержки, которые заставят их выглядеть менее используемыми в Stack Overflow. Например, Wordpress здесь не выглядит таким популярным, но это, вероятно, потому, что разработчики Wordpress получают помощь на других сайтах.
  • Stack Overflow Survey (https://insights.stackoverflow.com/survey/2019) - Здесь много полезной информации, но мне особенно нравятся Самые любимые, страшные и требуемые языки, поскольку они дают представление о текущее общественное мнение.
  • State of JS (https://stateofjs.com/) - аналогичные данные опроса, но с упором на фреймворки Javascript.
  • GitHub State of the Octoverse (https://octoverse.github.com/) - статистика от GitHub об использовании языка. Отлично подходит для отслеживания тенденций.
  • Открытие вакансий по языку программирования (поиск Indeed и т. Д.). Поиск на досках вакансий может показать вам, сколько вакансий существует для определенных технологий, что дает хорошее представление об общем использовании технологий и вероятном количестве разработчиков на рынке.

Примеры исследований

Вот несколько примеров проведения исследования стеков и выводов. Как всегда, есть много способов интерпретировать данные, и вы и ваша команда должны прийти к своему собственному выводу.

TypeScript:

Ruby on Rails:

Ржавчина:

Заключение

Факторы, обсуждаемые в этой статье, часто противоречат друг другу: последние события, скорее всего, порадуют ваших инженеров, но при этом у них будет гораздо меньший пул талантов, из которого они могут извлечь. Как правило, выбор популярного, популярного и современного языка / фреймворка - беспроигрышный вариант, но это зависит от конкретных потребностей вашей организации.

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