|
||||
前回は、名前に関するエピソードとして、「Joshua Tree Principle(名前を知
ることで、見えなかったものがめるようになるという法則)」を紹介し、名前の
重要性を指摘しました。今回はもう1つの名前に関するエピソードを紹介します。 それは、「問題を解く方法」に関するものです。数学の問題解決法を分析し、 大きく2つに分けると、 (1)Divide and Conquer(分割攻略) (2)Name and Conquer(定義攻略) になるそうです(*1)。Divide and Conquerは複雑な問題をより単純なサブ問題 に分ける方法です。ごく普通の考え方です。ソフトウェア開発に例えると、そ れはサブシステム分割や構造化分析設計になるでしょう。 (2)Name and Conquerは少し変わっています。これは、「名前を付ける」方法 です。 「まだ未知だが、とりあえずこの数をxとしよう。そして、xが満たす式はこ れである。」という未知数の導入であったり、「こういう振舞をする集合を群 と名づける。」という定義により、名付けた集合についての性質を調べていく 手法。つまり、問題から、「ある注目すべきもの」を見つけ、それに名前を付 ける、という行為から出発するのが、Name and Conquerです。この考え方をソ フトウェアに例えると、それはクラス抽出やオブジェクト指向設計になると私 は考えています。 Divide and Conquer も、Name and Conquerも共に複雑な問題を分析する考え 方でしょう。オブジェクト指向分析設計は、Name and Conquerに似ています。 分割して末端にまで落としてしまうDivide and Conquerではなく、問題領域を 分析して、オブジェクトという結晶を取り出して名前を付ける、 Name and Conquer の作業なのです。 * * * さて、ここで少し挑戦的な仮説を立ててみます。 Name and Conquerは、より「発見的な」手法であることは間違いありません。 発見的な手法であるならば、発見のセンスが重要になってしまいます。そのセ ンスは、経験によって磨かれるものであり、属人性を排除した手順によって定 義できるものではない、と思われます。 私の主張は、オブジェクト指向分析設計にはセンスが必要だ、ということ。そ して、センスは経験によって作られる、ということです。では、経験として有 効なものはなんでしょうか?私は、自分が参加するプロジェクトでもいいし、 まったく別の対象でもよいから、実際に手に入るよいコードやよいモデルをた くさん読むことではないかと考えています。よいものにたくさん触れること、 これがオブジェクト指向分析設計のセンスを得る、唯一の方法ではないでしょ うか。 |
||||
[1] この出典が思い出せません。私のオリジナルではないはずです。どなたか教えて下さい。 参考文献:G.Polya、『いかにして問題をとくか』 |
||||
つづき |