Реальные преимущества использования Moo(se) перед Perl OO
В настоящее время я работаю в компании, где мы занимаемся разработкой Perl. Тем не менее, код действительно грязный, использует действительно старые идиомы Perl, поэтому я решил постепенно его очистить и научить коллег по Modern::Perl, хорошему дизайну программного обеспечения, ООП - абстракция, связывание, наследование, принципы SOLID и т. Д. Я у меня есть недостаток, что я работаю здесь только месяц, так что я совсем новичок здесь.
Мой вопрос: могу ли я (если да, то как) убедить их в том, что стоит подумать о переходе на Moo(se) с простого Perl OO? Каковы преимущества этого? Мне нужны действительно веские причины для их рассмотрения.
Есть ли высокая стоимость с точки зрения производительности с использованием этих модулей? По своему опыту я знаю, что эти модули очень удобно использовать (и их характеристики действительно хороши), но я боюсь, что они будут отказывать в переключении из-за соображений производительности.
Так. Есть ли преимущество и как бы вы описали его разработчикам Perl, которые застряли в эпохе до 2000 года?
2 ответа
Я хотел бы начать с вопроса - ценят ли ваши коллеги, что вы подразумеваете под этими терминами, и почему они хороши? Принятие новой парадигмы всегда сопряжено с трудностями, потому что ДАЖЕ ЕСЛИ ваш "новый путь" во всех отношениях лучше... вы будете создавать унаследованную кодовую базу, которую еще нужно поддерживать. Или переработан.
Убедить кого-то "пойти вразрез", если он построил свое понимание Perl от bash-скриптинга до perl-хакерства... может быть проблемой. Они вполне могут - совершенно правильно - указать, что, хотя есть преимущества для переключения, применим "наименьший общий знаменатель". Есть много людей, которые знают Perl "не-Moose" по сравнению с теми, кто знает "Moose". (Это может иметь значение в вашу пользу - укажите, что это полезная техническая специализация, которая улучшает их возможности трудоустройства в будущем)
В конце концов, есть причина, по которой сценарии оболочки по-прежнему используются сегодня - это простое, понятное и доступное решение для немедленной проблемы.
Итак, прежде всего - представьте свои принципы информатики. Сделайте так, чтобы ваши коллеги внесли свой вклад в то, что вы наметили. Это займет время. Наверное, много времени. Если стиль кода не менялся в течение 15 лет, это означает, что кодировщикам там удобно.
Затем вы должны доказать своим коллегам, почему "ваш путь" достаточно лучше, чтобы они потрудились выучить его. Новые "вещи" появляются постоянно, и всегда есть кто-то, кто хочет попробовать новую и классную вещь. Вы будете похожи на этого человека для них. Что касается их, текущий "стиль дома" работает отлично.
Вы можете обнаружить, что реализация чего-то нового в вашем новом стиле убедительна. Заставьте их "принять участие" в доказательстве концепции. Вы можете найти несколько других кодеров, как идея тоже.
Но независимо от этого - вы должны принять вполне реальную возможность того, что никто не захочет платить техническую задолженность за "наследство", которое вы создадите, делая это. Бизнес-преимущество дает ограниченный набор парадигм кодирования, используемых в вашей организации. Вам нужно подумать о том, как сработают оба.
Хотя это не новое обсуждение - в ОО-программировании всегда были те, кто не видит в этом смысла - они видят издержки, а не выгоду. Причина, по которой мы используем ОО, не в том, что он более эффективен. Это потому, что это хороший способ создания надежного, надежного и тестируемого кода. Это будет вашим "шагом" для принятия Moose. Я бы посоветовал вам взглянуть на различные формы тестирования и подготовить демо-версию набора тестов, потому что это то, что ненавидит большинство программистов:)
В частности, для Moose есть несколько интересных обсуждений производительности на PerlMonks и Stackru. Суть в том, что у Moose значительный штраф за стартап, но не намного после этого.
Тем не менее, я думаю, что здесь есть более важный вопрос: когда вы должны переписать существующий код?
При выборе нового инструмента / метода необходимо учитывать два различных порога:
- Инструмент / метод XYZ полезен, поэтому мы должны использовать его при написании нового кода.
- Инструмент / метод XYZ настолько полезен, что мы должны переписать существующий код, чтобы использовать его.
Многие, многие люди совершили ошибку, переписав целый ряд совершенно хороших кодов, используя предпочитаемую ими парадигму, когда существующая парадигма была просто отличной. Мало того, что это потраченная впустую работа, есть опасность появления новых ошибок и ухудшения конечного продукта, чем это было раньше.
Изменение объектной системы, используемой существующей кодовой базой, близко к фундаментальному переписыванию кода. Это большие затраты и риск, и вам нужна очень веская причина для этого. Больше, чем просто "Moose лучше писать код".
Когда придет время написать новый фрагмент кода, который будет отделен от унаследованного кода, самое время попробовать Moose. Но я подозреваю, что изменение всего существующего кода не совсем оправдано. (Кроме того, с точки зрения того, чтобы заставить людей прислушиваться к вашим идеям, небольшие постепенные изменения будут работать намного лучше).