Давно известна фраза "работает - не трогай", типа принцип хорошего админа, всё такое. Понятно, откуда она взялась - есть такие неуемные личности, которым скучно, а разбираться, как работает система, чем может грозить поломка, им не хочется (обычно в силу возраста, соответствующего жопыта еще нет). Но нередко, особенно в последнее время, вижу в сообществе и другую сторону - когда этой фразой оправдывается консервативность и нежелание идти на любые перемены. Даже если они уже назрели и нужны. То есть сей афоризм несет полезный смысл, но в буквальном виде - всё-таки неверен.
Я для себя переформулировал его как "работает - не ломай" (улучшать можно, при условии, что ...), но это тоже несколько не то, отчасти из-за самоочевидности. И вот недавно в рассылке UAFUG пролетела такая цитата за авторством Michael Pigurnow:
Лень - враг прогресса (c)
имхо причина всего этого в 2-х факторах:
a. Лень в самом худшем ее проявлении. Когда в принципе "Работает - не
трогай (улучшай)" забывается важная оговорочка: работает _правильно_.
Из-за чего работающее уже через тухес воспринимается как само собой
разумеющееся, что ведет к оплевыванию любых попыток переделки ЭТОГО по
правилам и по уму.
b. Благодушная беспечность: "Чрезвычайные ситуации бывают исключительно редко
и уж конечно же _не со мной_"
Вот тут всё становится на свои места, особенно если вспомнить не менее известное "make it work, make it right, make it fast" (именно в такой последовательности, и каждое следующее не раньше имеющегося предыдущего). Остается только с виду незаметный, но очень важный вопрос - а что же такое правильно? Вроде всем понятное слово, но каждый под ним понимает что-то свое, обычно интуитивно понимаемое и расплывчатое. Более того, никакого абсолютного "правильно", общего для всех и всегда, нет и быть не может. Тогда что же это?
Я бы определил "правильно" как 3 компонента - цели, ценности и приоритеты. Они неразрывно связаны друг с другом.
- Правильно что-то делается или нет, зависит от цели, того, что требуется получить - что правильно в одной задаче, может быть неправильным в другой.
- При той же самой цели, делать что-то можно разными способами. Как выбирается способ? Между задачами соблюдаются какие-то более-менее постоянные ценности, принципы. Например, "деньги не пахнут" или "всё надо делать качественно". Ценности для человека - это то, что значимо, к чему он неравнодушен, на что ему не похуй. То, что можно описать словами "хорошо" и "плохо", в отличие от всех остальных вещей, к которым нет ничего, кроме равнодушия. Ну типа, "писать понятный читаемый код - это хорошо", "ломать мне посреди ночи работавший сервер, который я поеду чинить - плохо". (Замечу в скобках, что речь стоит вести не о декларируемых ценностях - если человеку плевать на утверждение "уступать старушкам место в автобусе - хорошо", реальной ценности для него это не представляет. Но эти темы уже совсем-совсем оффтопик.)
- Наконец, ценности как сами не равны между собой, так и могут вступать в конфликт с целями (точнее, обычно подзадачами, целями помельче, на которые бьется исходная). Или бывает, например, нехватка ресурсов или чего-то еще - так, что всё вместе удовлетворить нельзя. В этом случае приоритеты определяют, что из целей и ценностей сейчас важнее, а что, быть может, отбросить вовсе (скажем, в соответствующей ситуации "когда моим детям жрать нечего - плохо" перекроет собой "писать нечитаемый код - плохо"). Когда говорят "в той ситуации было правильно поступить именно так" (а обычно, мол, положено не так) - ноги растут именно отсюда.
Легко видеть, что, например, при наличии ценности "рабочий плохой код лучше перспективной идеи" получим следствие "если это не работает - это неправильно" (но при определенных обстоятельствах приоритеты могут изменить вывод на прямо противоположный, скажем, на отрезке в 10 лет).
Или что изо всех сил сидеть на FreeBSD 4.11 и бэкпортить патчи - неправильно, потому что трата времени админа на бэкпорты - не в целях и не в приоритетах.
И, возвращаясь к исходной фразе, становится понятно, когда же "трогать" - ведь и цели, и ценности, и приоритеты могут меняться со временем. Что было правильным год назад, может уже не быть таковым сегодня (ситуация меняется). Вот тогда влезать и менять работающее - не просто можно, а нужно.
P.S. Конечно, понятие правильности всё равно останется субъективным - не только от различия целей, но и от разницы в охватываемом в данной ситуации количестве ценностей и приоритетов у разных людей, учитываемых факторах (зависит от всё того же жизненного опыта). Тем не менее, осознавать свои цели, ценности и приоритеты (и общаться об этом с другими людьми, если есть такая необходимость) несколько проще, если понимать, откуда у своих представлений о "правильности" ноги растут.