Сначала ты не знаешь, что нельзя делать то-то
Потом знаешь, что нельзя делать то-то
Потом ты понимаешь, что иногда таки можно делать то-то
Ну а потом ты понимаешь, что помимо того-то существует еще шестьдесять шесть способов добиться желаемого, и все из них практически равноправны.
Когда тебя спрашивают "как мне добиться желаемого", ты быстро перебираешь в уме эти шестьдесять шесть способов, прикидываешь то общее, что в них есть, вздыхаешь и говоришь: "вообще-то, главное — гармония."
На вопрос обиженных учеников: "а как ее добиться?", ты говоришь: "никогда не делайте то-то".
Потом знаешь, что нельзя делать то-то
Потом ты понимаешь, что иногда таки можно делать то-то
Ну а потом ты понимаешь, что помимо того-то существует еще шестьдесять шесть способов добиться желаемого, и все из них практически равноправны.
Когда тебя спрашивают "как мне добиться желаемого", ты быстро перебираешь в уме эти шестьдесять шесть способов, прикидываешь то общее, что в них есть, вздыхаешь и говоришь: "вообще-то, главное — гармония."
На вопрос обиженных учеников: "а как ее добиться?", ты говоришь: "никогда не делайте то-то".
Я не буду рассматривать и классифицировать паттерны (хотя руки чешутся написать, но пока не созрело), это уже сделал Максим в своей фееричной статье про паттерны проектирования. Наоборот, я хочу рассмотреть само явление увязания в паттернах. Для этого классифицируем программистов.
Вуду
Таких большинство, разум их чист и незамутнен. Код их напоминает поток сознания ad-hoc перенесенный в синтаксис того языка программирования на котором они пишут. Сон разума рождает чудовищ, но их не мучает совесть - блаженны они, ибо не ведают, что творят. Сделать ctrl+c/ctrl+v тысячи строк и изменить одну просто потому, что так быстрее. Задачи решаются, а может и не решаются. Зачем разбираться, когда можно перепробовать несколько вариантов и возможно один из них заработает. Он не думает о последствиях, жизненном цикле своего кода, сопровождении. Их работа непрерывная - вуду практика, вокруг них магический мир со своими внутренними законами, принципиально непознаваемыми, остается только молиться своему пантеону богов.
Шаблонисты
Эти программисты услышали про паттерны, прочитали википедию, "банда четырех" стала им библией или любая другая книга про паттерны. Помимо паттернов могут цитироваться лучшие практики. Код начинает из кучи глины преобретать какую-то форму. В процессе работы, могут употребляться умные слова и активно использоваться паттерны. К сожалению, применение не всегда обосновано или уместно. Такие люди не видят границ применимости и ограничений, плюсов и минусов, исходных причин, стоящих за этим решением. Они не приемлят компромиссов. Сказано что методы должны быть в две-три строки, и плевать, что получается неотлаживаемая лапша из диких джампов. Имена должны быть говорящие, будем называть переменные так, как будто мы коренные немцы, и плевать что простые операции не будут помещаться в 80 колонок. Нет ощущения гармонии и красоты.
Shu-Ha-Ri
Универсальный принцип подчинение-отступление-освобождение. Так вот, те самые паттерны и есть первый уровень - подчинение, когда нужно в точности повторять указания мастера, оттачивая до автоматизма базовые навыки. И вот как раз в этот момент делается самая большая ошибка: нужен мастер, для перенимания опыта. Невозможно научиться боевым искусствам, прочитав книжку с десятком ката. Но почему-то считается, что можно научиться высокому программированию, прочитав книжку с десятком паттернов.
Я уверен, что самый эффективный способ передачи опыта, через code review shu. И те самые паттерны нужны именно на этом первом уровне, когда можно сказать: используй маваши-гери фабрику, вынеси зависимость. Отточив навыки до автоматизма, начинаешь экспериментировать, пробовать так и эдак, проверять границы применимости ha. И в один прекрасный момент понимаешь, что важна красота, чем меньше кода, тем лучше, а все паттерны именно про это ri