Искусство воевать

Читая книгу «Code Complete» Steve McConnell, я обнаружил интересное сходство с военным искусством.

Речь пойдет не о философских принципах, хотя это тоже тема заслуживающая внимания. Здесь невозможно не упомянуть несколько Великих цитат.

Всякая истина, выраженная словами, есть сила, действие которой беспредельно. (Л.Н.Толстой)
Принуждающий нас силой как бы лишает нас наших прав, и мы потому ненавидим его. Как благодетелей наших, мы любим тех, кто умеет убедить нас. Не мудрый, а грубый, непросвещенный человек прибегает к насилию. Чтобы употребить силу, надо многих соучастников; чтобы убедить, не надо никаких. Тот, кто чувствует достаточно силы в самом себе, чтобы владеть умами, не станет прибегать к насилию. Государство прибегает именно потому, что оно сознает свое бессилие убедить людей в своей необходимости. (По Сократу, из записей Л.Н.Толстого)
Настоящее Искусство Мира ­ в том, чтобы не жертвовать ни одним своим воином для разгрома врага. Побеждай врагов, всегда занимая безопасную и неуязвимую позицию; тогда никто не пострадает. Путь Воина, Искусство Политики ­ в том, чтобы остановить беду до того, как она начнется. Побеждай своих противников духовно, заставив их осознать бессмысленность их действий. Путь Воина заключается в том, чтобы устанавливать гармонию. (Морихэй Уесиба)
Путь Воина, Искусство Политики ­ в том, чтобы остановить беду до того, как она начнется. (Морихэй Уесиба)
Воин обязан положить конец всяким спорам и страстям. (Морихэй Уесиба)
В АЙКИ-ДО мы овладеваем умом противника до того, как сойдемся с ним в поединке. (Морихэй Уесиба)
Побеждай противника сначала мыслью а потом делом. (А.В.Суворов)

Но у нас речь пойдет о тактике военного искусства. В одном фильме (уже не помню в каком именно) было красиво сказано:

Искусство воевать заключается в том, чтобы быть сильным в нужное время в нужном месте.

Различные мышцы человека различны по своей силе. Одни группы мышц сильнее, другие - слабее. Это естественно, ведь они выполняют различные функции. Но это так же значит и то, что если мы противопоставим свои более сильные группы мышц более слабым группам мышц противника, то мы создадим силовое превосходство на данном участке тела противника. На этом принципе основаны болевые приемы Самбо и Айкидо.

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

Суть ударных техник, опять же, заключаются в том, чтобы обеспечить контакт своих менее уязвимых частей тела (ударная поверхность) против более уязвимых частей тела противника.

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

Путем декомпозиции мы разделяем обязанности методов до такого уровня, который легко поддается нашему мозгу. Иными словами, следуем принципу (как это ни странно звучит) “разделяй и властвуй”. Стив Макконнелл обращает внимание на число 7 - количество объектов, которыми может одновременно оперировать человеческий мозг.

Сходство между военным искусством и программированием заключается в том, чтобы сконцентрировать свое внимание на таком участке сложности, который человеческий мозг способен разрешить. Т.е. создать такую перегруппировку сил своего внимания против сложности кода.

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

Следование такому принципу позволяет избежать “заторов” в работе и обеспечить “быстрое наступление” на код.

Чем-то мне это напомнило принцип Дейла Карнеги “Живите в отсеке сегодняшнего дня”. Можно сказать, что основная битва человека за свое счастье - это битва с собственными мыслями.

P.S.: За что я люблю KISS-принцип, так это за то, что один из его принципов гласит:

Будьте Скромны, не считайте себя супер-гением, это ваша первая ошибка. Оставаясь Скромным вы в конечном итоге достигнете уровня супер-гения, и даже если нет, какая разница. Ваш код чертовски прост так, что вам не нужно быть гением чтобы работать с ним.

Be Humble, don’t think of yourself as a super genius, this is your first mistake By being humble, you will eventually achieve super genius status =), and even if you don’t, who cares! your code is stupid simple, so you don’t have to be a genius to work with it.

Comments

comments powered by Disqus