大きな問題は小さくして1つずつ対処する――分割統治法:問題解決力を高めるコツはプログラミングの原則・思考にあり(4)(1/4 ページ)
本連載では、さまざまなプログラミングの原則・思考の中から、特に問題解決力を高めるのに役立つものをピックアップ。プログラマーは、その思考法をビジネスに応用し、そうではない人はプログラマーと一緒に働く際に思い出してほしい。今回は「分割統治」「1歩ずつ少しずつ」「繰り返しの最小化」の重要性、論理的思考のコツなどについて。
書籍の中から有用な技術情報をピックアップして紹介する本シリーズ。今回は、秀和システム発行の書籍『プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則(2016年3月22日発行)』からの抜粋です。
ご注意:本稿は、著者及び出版社の許可を得て、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
なお書籍では、ソフトウェア業界で高名な、よいコードを書くための「プリンシプル」を紹介しています。プリンシプルとは、プログラミングの指針となる「前提」「原則」「思想」「習慣」「視点」「手法」「法則」などのことです。具体的には、「分割統治」「1歩ずつ少しずつ」「繰り返しの最小化」などのプリンシプルがあります。こうした各プリンシプルについて、「それは何なのか(=What)」「それはなぜなのか、なぜ必要なのか(=Why)」「ではどう使えばよいのか、どうすればよいのか(=How)」を中心に解説する構成になっています。
本連載では、さまざまなプログラミングの原則・思考の中から、特に問題解決力を高めるのに役立つものをピックアップしていきます。プログラマーは、その思考法をビジネスに応用し、そうではない人はプログラマーと一緒に働く際に思い出していただければ幸いです。
今回は「分割統治」「1歩ずつ少しずつ」「繰り返しの最小化」の重要性、論理的思考のコツなどについて解説します。まずは「分割統治」の重要性から紹介しましょう。
※編集部注:前回記事「プログラミングに特効薬や万能薬はない――複雑さへの対抗手段としての抽象化とKISS」はこちら
アーキテクチャ根底技法(10) 分割統治
英語 Divide and Conquer
What 〜大きな問題を小さく割る
そのままでは解決することが難しい「大きな問題」は、いくつかの「小さな問題」に分割して、個別に解決します。
小さくした各個の問題は、元の問題に比べて格段に容易になり、すぐに解決に至ります。個々の問題解決の積み上げにより、最終的に、元の大きな問題の解決に至ることができます。
Why 〜大きなままでは制御不能
大きな問題を、大きな問題のまま解決しようとすると、解決が困難になり、解決が遅くなります。最悪、解決できない場合もあります。規模が大きすぎるがゆえに、問題が複雑になりすぎているからです。
制御が容易になるような規模まで問題を分割して、それから取り組む方が効率的です。
How 〜小さくして各個撃破
問題を分割してから、解決するようにしましょう。例えば、以下のようにします。
- ソフトウェア全体を設計する時は、独立して設計できる部分に分割してから、取り組みます。
- モジュールを設計する時は、「責任・責務」の観点からモジュールを分割するようにします。
- アルゴリズムを設計する時は、マージソートのように、ボトムアップで分割してから問題解決できないかどうか、検討します。
- 大量データ処理を設計する時は、MapReduceのように、計算を小さい単位に分割して、分散環境で並行して実行できないかどうか、検討します。
Copyright © ITmedia, Inc. All Rights Reserved.