За все время службы в канадском правительстве Боб успел поработать во многих IТ-отделах. Некоторые из них были достаточно современными, а другие, казалось, отставали и постепенно накапливали все больше и больше технических долгов. Свою первую должность руководителя проекта Боб занял в месте, где использовался язык программирования, о котором он никогда не слышал. Даже в интернете он не нашел какой-либо внятной информации. В отделе также использовали платформу. Net, и вся работа была разделена между двумя языками.
Когда появился проект по созданию нового программного продукта, Боб предположил, что они будут использовать новейшую версию платформы. Net, а в качестве языка программирования – либо VB.net, либо C#. В разговоре с техническим руководителем проекта ему сообщили о намерении использовать странный древний язык программирования, так как «нужно обеспечить наших программистов работой». Ему сказали, что часть программистов не уверены в своей работе, потому что не знают. Net-языка.
Боб был потрясен. Зачем намеренно создавать новые технические долги? Тот язык уже даже не поддерживался. Он поговорил с высшим руководством, и они пришли к компромиссу: чтобы избежать серьезных ошибок во время проекта, для программистов добавят обучение языку. Net, и они будут работать в паре с теми, кто уже знает этот язык. Таким образом он обновил навыки своей команды и завершил проект без нового технического долга! Программисты были в восторге, узнав, что им оплатят обучение и наставничество на рабочем месте. На начальном этапе такое решение потребовало немного больше затрат, но в долгосрочной перспективе оно стало отличной инвестицией в своих сотрудников. Боб особенно гордился этим проектом.
Управляя проектами в другом IТ-отделе, Боб обнаружил, что все приложения используют разные версии платформы. Net. Некоторые были на версии 4.5, а другие – только на версии 2. Приходилось управлять таким количеством различных SDK, что специалисты по эксплуатации были очень недовольны разработчиками, из-за чего часто возникали конфликты при попытках развернуть два приложения на одном веб-сервере. Боб нанял консультанта, чтобы тот проверил безопасность одного из приложений. Тот просканировал весь репозиторий кода с помощью инструмента под названием SCA и обнаружил, что несколько старых версий. Net имеют критические уязвимости в системе безопасности. Служба безопасности была очень расстроена, узнав об этом. В итоге Боб создал сетку всех небезопасных версий платформы и запустил новый проект по обновлению до версии, в которой нет обнаруженных критических уязвимостей, а также разработал постоянный план по обеспечению того, чтобы они оставались в пределах трех незначительных вариаций текущей версии платформы. К концу проекта служба безопасности провозгласила Боба защитником безопасности и вручила небольшой сертификат, который он повесил у себя над столом. Он был так горд!
СОВЕТ. SDK расшифровывается как «комплект для разработки программного обеспечения» (от англ. software development kit), однако это название не является интуитивно понятным. SDK – это компоненты, которые должны быть установлены на локальной машине или на веб-сервере для правильной работы программ. Некоторые типы SDK могут иметь разные версии, установленные одновременно на одной машине, а некоторые – нет. Помните, что решение обновить одно из своих приложений до новейшей версии SDK может вызвать проблемы для других пользователей в офисе.
ПРИМЕЧАНИЕ. SCA расшифровывается как «анализ состава программного обеспечения» (от англ. Software Composition Analysis). Это процесс (обычно выполняемый автоматизированным инструментом) проверки всех включенных в приложение сторонних компонентов, библиотек или платформ на отсутствие известных уязвимостей. С помощью SCA также отслеживается наличие лицензий. Подробнее об этом дальше.
Боб недолгое время работал над сверхсекретным проектом, возглавляя команду, которая создавала инструмент для изучения вредоносных программ штатными аналитиками. Команда хотела написать его на языке C, а не Rust. Боб слышал о том, что Rust безопаснее для памяти, и поэтому твердо выступал за использование именно этого языка. Команда объяснила ему, что они, следуя принципу «Buy, Borrow, Build» (букв. «Покупай, заимствуй, строй»), используют инструмент, разработанный другим правительством, с которым у них доверительные отношения, и он уже написан на языке C. При переходе на Rust всю работу пришлось бы начинать с нуля. Поскольку данный инструмент будет использоваться только внутри компании и своими экспертами, он будет защищен от внешних злоумышленников. Последним аргументом в пользу C стало отсутствие опыта работы с Rust, из-за чего потребовалась бы организация соответствующего обучения. Взвесив все вышеперечисленные факторы, Боб согласился с тем, что следует продолжать использовать язык C, и оформил это решение как часть дизайна проекта.
Необходимо выбирать для работы язык программирования и платформу, которые поддерживаются в течение длительного времени, и использовать только последнюю или предпоследнюю версии. Стоит ориентироваться на вариант, имеющий все функции по обеспечению безопасности, необходимые для разрабатываемого продукта. Нужно обходить стороной платформы, о которых известно, что они небезопасны, больше не поддерживаются или имеют другие проблемы.
СОВЕТ. Разумеется, никогда не следует выбирать платформу только потому, что она новая, крутая или интересная, однако стоит также подчеркнуть, что наличие долгосрочного видения стека технологий имеет решающее значение. Меньшее количество технологий, платформ, языков, библиотек, компонентов, движущихся частей обеспечивает более легкий в обслуживании набор систем и, следовательно, меньший технический долг.
С помощью SCA выбранная версия проверяется на отсутствие серьезных известных уязвимостей. Этот инструмент можно использовать для еженедельного сканирования репозитория и конвейера при каждой сборке, чтобы убедиться, что в продукт случайно не попали известные уязвимости.