一つの問題に対する解決法は単一とは限らない

立体的なアプローチが大切

※個人的なポリシーをまとめています。

一つの問題に対する解決法は単一とは限りません。
関連事項の多い複雑な問題であればあるほど、
解決法も複雑になるでしょう。

A という問題があって、
X, Y, Z という三つの解決法候補があるとします。
「X では A を(完全には)解決できないから X はダメだ」
どこかに論理的な間違いがあります。
X では A を完全な解決ができないことは事実かもしれません。
でも、A を解決するのに X がダメかどうかはまだ不明です。

多くの場合、銀の弾丸はありません。
つまり、X も Y も Z も A を完全に解決することは
できないことが多いのです。
なので、X と Y を組み合わせてアプローチする、
もしくは、X メインにY と Z を補助的に活用してアプローチする、
実際にはこういったように、

立体的に複数の解決法を組み合わせたアプローチこそ

が、現実的な解決法になることがあり、
それを議論のときに忘れないようにすることが大事です。

また、解決法には別の問題を発生させる可能性もあり、
リスクを帯びた選択肢であることは珍しくありませんし、
そもそも 100% 保証の解決法なんてなかなか存在しません。
そのような負の面の考慮もしていくと、
複数の解決法でのコラボレーションがより現実味を帯びてきます。

// リスクのない解決法なんてめったにない | jfluteの日記
http://d.hatena.ne.jp/jflute/20110303/hasrisk

// 保証された解決法なんてめったにない | jfluteの日記
http://d.hatena.ne.jp/jflute/20110304/guarantee

多くの人に伝えるのにシンプルな方が伝わりやすいので、
何かとそのように演出されがちですが、
(その演出自体が大事なことも確かにありますが)
複雑な問題の解決はなかなかシンプルにはならないのも事実。
もちろん、最大限シンプルにする努力を忘れないことが前提での話。

簡単に X を捨ててしまうのはもったいない

生活の中での話を例にして、
環境保護(地球温暖化)という問題があるとします。
その中でエコバッグを利用してビニール袋の利用を
削減しようというアプローチがあります。
このエコバッグという解決法、
これだけで環境保護の問題が解決するか?
といったらそんなことはありません。
でも、じゃあエコバッグという方法はダメか
といったらそんなことはありません。
生活で一杯一杯の個人ができるささやかな環境保護活動という、
数ある解決法の中の一つとして役割を担うものなのです。
それだけを焦点に議論するとそこが見えてこないかもしれません。

せっかくわかりやすい生活の中の話をしているのになんですが、
DBFluteだけでシステム開発現場の問題の全てを
解決できるわけではありません。
できるとも思わないし、もとよりそのつもりではない。
ただ、解決のための一つの役割を担うことのできるツールではあります。
そして、単なるO/Rマッパにしては温度の違いはあれど
予想外に広い範囲の領域に対してアプローチのあるツールです。

DBFluteに限りませんが、先ほどの A と X の関係の理論で
簡単に X を捨ててしまう現場をよく見掛けるので、
本当にもったいないなぁと思うと同時に、
自分もそれを気をつけてアプローチをしていかなければならないと
肝に銘じています。

問題を完全解決する必要があるとは限らない

また、そこで100点が必要とも限りません。
0点よりは70点80点で十分の場合も。
毎回エコバックを持っているとも限らないし、
状況によってはどうしてもビニールがあった方が
良い場面もあるかもしれません。
そういうときは遠慮なくもらって、
ただそのビニールをすぐに捨てるのではなく
生活の中で何度かうまく活用していければいいかもですね。

解決法も完全遂行が求められるものと、
そうではなくバランスよく遂行されればいいものとあります。
完全遂行が必要と思い込んで、
その解決法を実践するのがつらくて止めてしまうと意味がありません。
完全遂行が必要でないならバランスよくやって継続すればいいです。

同様に、DBFluteなどツールの全ての機能を
完全に使いこなす必要もありません。
バランスよくいいとこ取りをして80点くらい取れれば十分です。
残りの20点を埋めるパワーは、別の領域で30点に
留まっているものを80点にするのに費やす方が良いです。
総合点が高いことの方が重要なことが多いので。
もちろん空いた時間で残りの20点を埋めるための
アプローチ(勉強)をしていくのはとても良いことです。

// 問題を完全解決する必要があるとは限らない
http://d.hatena.ne.jp/jflute/20110605/enough

解決法の評価項目が単一とは限らない

また、エコバッグという方法に実効性が本当にあるのか?
全くにないにしても他の解決法からすると
非常に極少の効果しかないのではないか?

確かにそういう疑問はあります。
個人がビニール袋の利用を削減しても車に乗ったら
その分は簡単に吹っ飛ぶという話も聞きます。
ではダメか?というのはまだ早い。
そもそも、ゴミ削減という別観点のメリットがあるかもしれません。
実効性に関わらずキツキツの生活の中でも意識して
環境保護活動をするという精神的な習慣が付くかもしれない。

いざ個人ができる別の実効性の豊富な選択肢が出てきたときに、
保護活動に対する精神性を養われていることで
みんなすんなり新しい方法を実践できるのであれば、
それはやはり解決のための一つの役割を担ったものと言えるでしょう。
直接的な実効性だけを評価項目にすると、
間接的なメリットを見逃す可能性があるかもしれません。

// 解決法の評価項目は単一とは限らない
http://d.hatena.ne.jp/jflute/20110306/items

せっかくわかりやすい生活の中の話をしているのになんですが、
普段からパフォーマンスチューニングを全く意識していない
プログラマがいきなり重要なパフォーマンスチューニングを
求められる場面に出くわしても、
なかなかいきなり成果をあげるのは難しいでしょう。

もちろんやらなくてもいいことをやり過ぎるのもよくないので
限度はありますが、実効性のあるないに関わらず、
普段からパフォーマンスチューニングを意識した
プログラミングに努めているなら、
いざそれを要求されたときにも精神的にも技術的にも
すんなりとアプローチできる可能性が高いでしょう。

ちなみに、精神性というのは意外に重要なことです。
人間何事も慣れたことはミス少なくしやすいですが、
慣れてないことに関してはミスが付きものです。
もちろん、慣れ過ぎも注意ですけどね。

問題解決は論理と感覚のコラボレーション

一方で、無限に存在する立体的な解決法の組み合わせの中から、
その状況にフィットする組み合わせを捻出するのは大変な作業です。
わかりやすい定量的な指標が出せるような問題領域は稀ですし、
またどれだけ定量的な指標を出しても、
最後はある程度「感覚的な判断」が必要になるでしょう。

でも、論理が積み重なっている上での感覚的な判断と、
何も積み重なっていない状況での感覚的な判断とでは
その精度は大違いです。
問題の解決が単一であると思い込んでいたら、
湧き出てくる感覚もそれに縛られてしまうかもしれません。
ある種、
「問題解決は論理と感覚のコラボレーションの繰り返し」
とも言えるかと。

問題解決アプローチの時間軸

また、立体的な組み合わせと共に、
解決法は時間とともに変わるかもしれません。
二次元から三次元だけでなく、
三次元から四次元への着眼も求められることも。

昔の解決法が今の解決法と一致するとは限らないし、
今の解決法と一年後の解決法が一致するとは限りません。
時間の流れとともに解決法の組み合わせ、
もしくは、
解決法自体を変化させていく必要もあるかもしれないのです。
それこそ解決法を単一と考えてしまうと、
以前は効果あったのに今は随分と的外れなことをやってしまっている、
という可能性もなきにしもあらずです。

ここに記す

と、自分が色々なことを議論するときに忘れないようにしていることであり、
できなかったときもあったかなと反省の念もこめて今後のためにここに記す。