И способы с этим справиться

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

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

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

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

Итак, что вы делаете, когда унаследовали дисфункциональный код? Вы знаете тот вид, который не имеет логического смысла и имеет код, напоминающий пьяного и дезориентированного паука, пытающегося построить паутину.

Процесс микро-перестройки

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

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

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

Это обычная практика в отрасли из-за ограничений по времени и бюджету.

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

Предложить параллельную сборку

PayPal инициировал подход параллельной сборки еще в начале 2000-х годов с Java на Node.js.

В течение этого периода они продолжали улучшать приложение Java, что занимало примерно 150 дней на цикл выпуска, создавая при этом гораздо более эффективный и действенный стек на основе JavaScript.

В течение 18 месяцев им удалось превзойти оригинальное приложение Java по функциям, и они смогли переключить бизнес на новое приложение.

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

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

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

Спасение кода с помощью рефакторинга

Когда новая сборка отсутствует, спасение кода посредством рефакторинга может быть единственным вариантом. Однако что означает рефакторинг?

Вот несколько эффективных методов, которые могут вам помочь.

Изолировать и ограждать

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

Это даст коду более четкие логические границы - даже если код внутри него немного запутан.

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

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

Это также позволяет изолировать ваши перезаписи - давая вам объем работы и некую логическую границу.

Рефакторинг под правила

Иногда беспорядочный код возникает из-за того, что разработчик кода имеет ограниченное представление о предметной области, в которой он кодирует, с ограниченным набором инструментов в своем банке знаний.

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

Начните снизу и двигайтесь вверх - какую оболочку вы хотите использовать? Как вы описываете свои компоненты, классы и функции? Используем ли мы ООП или функциональные шаблоны? Если да, то когда? В каком контексте?

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

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

Выберите уборщика кода

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

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

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

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

Заключительные слова

Иногда бывает трудно понять, с чего начать, когда речь идет о неработающем коде. Вам не разрешено «перестраивать», но когда вы проводите рефакторинг, вы, по сути, переписываете код - иногда с нуля.

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

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

Спасибо за чтение. ❤

Афинья