Программисты хорошо решают похожие задачи. Весь смысл программирования в том, чтобы научиться каждую вещь делать не более одного раза, решить задачу один раз и дальше пользоваться этим же кодом для повторных случаев или похожих задач. Научился кипятить чайник без воды (1) → дали чайник с водой → вылей и вернись к программе (1). С этим все нормально, кажется, так и должно быть.
Еще бывают ситуации, когда ты не знаешь, какую задачу ты решаешь. Например, знаешь, что именно нужно изменить (допустим, на это место жалуются), но не знаешь, как. Правильно ли будет в таком случае применить уже существующее решение, которое ты уже
успешно использовал
в другом месте? Или сначала следует понять, в чем состоит новая задача, что именно и зачем ты делаешь, а потом проверять
все возможные решения — в том числе и те, которые ты уже использовал в других местах — на предмет того, эту они задачу решают или другую.
Проще говоря, в одно месте ты переделал, и стало круто. Нужно ли то же самое делать с другим местом, или сперва нужно задуматься — решит ли это те же самые проблемы, и вообще,
те же ли самые проблемы у нового места?
Подсказка: второй вариант (перед каждым изменением задавать себе вопрос, а какие проблемы мы решаем на этот раз) нужно использовать всегда. Даже если неявно ты переделываешь два очень похожих места, нужно понимать их различия. У каждого могут быть совершенно разные задачи и проблемы, в конце концов, ведь почему-то это два разных места, а не одно, верно?
Почему «Насущное»? У нас вот как-то особенно любят, придумав какое-то решение, начинать пихать его везде без разбору. Изначально оно было хорошо там, где оно действительно нужно. Но это не значит, что в остальных местах оно тоже что-то улучшит. С одной стороны, программистов можно понять: сами средства программирования подталкивают нас к тому, что, например, если класс поддерживает интерфейс, то и все его наследники тоже должны поддерживать. С другой стороны, умными людьми это иногда нарушается, причем обычно
правильно нарушается. То же самое с интерфейсами пользователей. Однообразие пользовательского интерфейса — хорошая, важная характеристика, пока она не вступает в конфликт с задачами пользователя. Как говорится,
Consistency is the easy choice. Context is the thinking choice. В переводе на русский, пусть лучше вещи работают так, как нужно в данной конкретной ситуации, чем везде одинаково. Если идти еще дальше, то каждый раз, делая улучшение, мы должны понимать, что именно оно улучшит. Иначе его лучше совсем не делать.