Разработка
Мантры программирования — это не догмы, а выражения
Когда дело доходит до программирования, вы должны не просто выбрать одно из противоречащих друг другу правил, подходящих к тому, что вы хотели сделать в любом случае, а понять, что вы, возможно, собираетесь сделать что-то глупое, и подумать, прежде чем продолжать.
Я считаю, что многих споров вокруг практик разработки программного обеспечения можно избежать, если просто понять, что все наши мантры нужно понимать как выражения, пословицы, а не как законы.
Если вы разбираетесь в пословицах, то знаете, что у каждой пословицы есть и противоположная по смыслу.
Это значит, что можно говорить DRY — Don’t Repeat Yourself, а также WET — Write Everything Twice.
Это значит, что мы можем цитировать Кнута, говорящего, что преждевременная оптимизация — корень всех зол, и при этом считать, что производительность — это важная характеристика.
Мы можем понимать и применять разделение ответственности, но при этом видеть ценность локальности поведения.
Есть время для YAGNI, и есть время для воздержания от YAGNI.
Ни одно из этих положений не содержит логических противоречий. Пословицы заключают в себе небольшую толику мудрости в краткой фразе, но вам еще нужно научиться правильно применять эту мудрость.
Хорошие пословицы также должны заставлять вас задуматься. Они заставляют вас замедлиться, прежде чем вы решитесь на что-то, что может оказаться плохим, или помогают вам задуматься о том, что пошло не так.
Одна пара библейских пословиц, которая хорошо иллюстрирует обе эти вещи, содержится в Притчах 26:4-5:
4 Не отвечай глупцу по его глупости, иначе и сам будешь подобен ему.
5 Отвечай глупцу по глупости его, иначе он будет мудр в своих собственных глазах.
Первый вопрос заключается в том, что вы должны подумать — стоит ли спорить в этой ситуации?
Второй шаг, когда вы уже несколько раз неудачно общались с человеком, заключается в том, чтобы подумать — а стоит ли вообще с ним спорить? Если человек глуп, то вы просто не сможете победить.
Третий шаг — это когда вы думаете так: я заметил, что никто никогда не спорит со мной долго. Это потому, что я всегда прав, или потому, что я дурак, который не желает проигрывать спор?
Поэтому, когда дело доходит до программирования, вы должны не просто выбрать одно из противоречащих друг другу правил, подходящих к тому, что вы хотели сделать в любом случае, а понять, что вы, возможно, собираетесь сделать что-то глупое, и подумать, прежде чем продолжать.
Если кажется, что вы собираетесь пойти против накопленной мудрости, вам нужно подумать о том, откуда взялась эта мудрость, и о последствиях ее игнорирования.
Например, в случае с DRY вам нужно понять, что речь идет не о повторяющемся или скучном коде, а о встраивании одних и тех же знаний в систему в нескольких местах, и о том, что это может стать проблемой, когда вы захотите что-то изменить. WET, с другой стороны, говорит о том, что преждевременные абстракции обходятся дороже, чем дублирование.
Как только вы замедлитесь, чтобы подумать об этом, вы сможете определить, что применимо в вашей ситуации, и что вы можете сделать, чтобы смягчить трудности, с которыми вы можете столкнуться, если решите проигнорировать пословицу — другими словами, вы можете применить «Забор Честертона» (“Никогда не ломайте забор, не узнав, зачем его поставили”).