Добавить в корзинуПозвонить
Найти в Дзене

Корень всех зол в программировании

Нет, это не преждевременная оптимизация. Она лишь росток от истинного корня - оверинжениринга. Каждый начинающий программист попадает в ситуацию, когда для добавления новой функциональности приходится всё выбросить и переписать. Боль от расставания со старым кодом оставляет в его сердце шрам на всю жизнь. И тогда он начинает искать любой способ, чтобы эта ситуация больше не повторилась. На помощь приходят OOP, FP, MVC, TDD, SOLID и другие аббревиатуры длинной от 2 до 5 букв. Они сеют мысль, что если сделать все правильно, то код почти не понадобится менять. Можно только добавлять новый. OCP (принцип открытости/закрытости) даже так и постулирует: "фигач новый код, не трогай старый". Прагматично, ничего не скажешь. Наш юный разработчик выбирает наиболее приглянувшуюся методологию. Например, PUP (Pink Unicorn Principle). И начинает оттачивать навык её применения. Потом в его арсенал подключаются другие умные концепции. И каждая заставляет кодить больше и сложнее, обещая взамен ту неуловим

Нет, это не преждевременная оптимизация. Она лишь росток от истинного корня - оверинжениринга.

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

КДПВ придумал с сильного похмелья. Не ищите глубокого смысла.
КДПВ придумал с сильного похмелья. Не ищите глубокого смысла.

На помощь приходят OOP, FP, MVC, TDD, SOLID и другие аббревиатуры длинной от 2 до 5 букв. Они сеют мысль, что если сделать все правильно, то код почти не понадобится менять. Можно только добавлять новый. OCP (принцип открытости/закрытости) даже так и постулирует: "фигач новый код, не трогай старый". Прагматично, ничего не скажешь.

Наш юный разработчик выбирает наиболее приглянувшуюся методологию. Например, PUP (Pink Unicorn Principle). И начинает оттачивать навык её применения. Потом в его арсенал подключаются другие умные концепции. И каждая заставляет кодить больше и сложнее, обещая взамен ту неуловимую радость - код, который не надо переписывать при добавлении новых требований.

-2

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

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

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

Всем KISS.