私流問題の解き方

投稿者: | 2018年11月26日

仕事や勉強などにも通じる、問題の解き方について、考えていない人が多く、時間を浪費しがちだなぁと感じるので、私なりの方法をメモします。

注意事項

これはあくまで私個人の意見です。主観だらけですので、正しくないことがあります。あくまでも一個人の意見として読んでいただければと思います。

経緯

どうも、問題が与えられたときに、どうやって解けばいいかわからず、ぐるぐると思考が巡っている人がいるな、という印象を受けました。そう感じる出来事に遭遇しました。

かく言う私も、べつに問題を解くのが得意ではありません。得意ではないですが、自分なりにどうやったら効率よく問題が解けるかについて考えたことがあります。

だって、問題を効率よく解くことができたら、時間短縮になるし、仕事も早く終わるかもしれないし、成績も上がるはずなのです。

なので、自分がその方法を身につけるためにも、そして、思考がぐるぐる回りがちな人のためにも、せっかくブログをやっているので、自分流の考えをまとめたいと思います。

あくまで私の意見ですので、間違った方法かもしれませんが、「ふーん」程度に読んでいただければ。

私流問題の解き方

以下が概要です

  • わかること、できること、できないことを整理する
  • 問題は分割して考える
  • 破壊してもよいという考えを片隅においておく

上二つは正直同じようなことを言っています。が、頭の中を整理するという意味で書かせてください。

わかること、できること、できないことを整理する

そのままの意味です。

例えば数学の問題で、ある図形が与えられ、「辺ABの長さを求めなさい」といった問題が出るとします。

その時、大体の皆さんは、辺ABをどうやったら求められるかを考えます。当たり前です。私もそうです。

ですが、辺ABを直接求められないとき、「どうやったら求められるだろう?」と考え、堂々巡りをすることがあるのではないでしょうか?

そんなときに役に立つのがこの考え方です。

まず、わかることを整理します。例えばこの例だと、辺AB以外でどの辺がわかるのか、問題文に書いてあった長さを図形に書いてみる等がそれにあたります。

つぎに、できることを整理します。上述の例だと、図形に関する知識を頭から取り出す作業を指します。「直角三角形と2辺の長さが分かれば、残りの長さが分かる」、「円に内接する角があれば、その角度を求められるかもしれない」、などです。

そして、できないことを整理します。できないことを整理するときは、「なぜ」を重視します。
例えば、辺ABは求められない。なぜなら、できることで思い出した「直角三角形と2辺の長さで、残った辺の長さが分かる」ことを利用したいが、1辺の長さしかわからない。
などです。

そうすると、
辺ABを求めるには、別の辺を求める必要がある。
別の辺を求めるには、これまた別の辺を求める必要がある。
という風に、問題がより簡単になるのです。

ここでいう簡単とは、
例として出てきた辺AB以外の「別の辺」たちのうち、どれかを求めることができたら、辺ABが求められるため、できることで挙げたものが使いやすくなる、という意味です。

このように、わかること、できること、できないことを整理することで、問題を簡略化することができます。この方法は数学でも使用できますし、プログラミングなどでも応用できます。作りたいプログラムの実現のため、自分にできることなどを整理し、使えそうな技術を使うのです。

問題は分割して考える

上述の話をよりシンプルに表現にしたのがこの考え方です。とくに、できないことを整理することにあたります。

例えばお客様から、○○という機能を持つソフトウェアを制作してほしい、といった要望を受け取ったとします。お客様がプログラミングに関して詳しくない場合、必要な機能についての抽象的な表現が比較的多くなるかと思います。あくまで想像ですが。

私たちは、その抽象的な表現を的確に実現させるため、聞いた話をもとにプログラミングができるくらいに具体的にしなければなりません。

そんな時、問題を分割する考えが役に立ちます。
お客様が必要としている機能について、まずは最小単位の機能を考えます。

「在庫管理をしたいんだよねー。商品はバーコードで読み取ってその個数を管理し、出荷時は画面から直接数値を打ち込んで個数を減らす感じ。んで、バーコードのない商品は別途品番で管理するようにしたいなぁ。あと、インターネットで販売するから、ショッピングサイトに表示している在庫も直接そのアプリで編集できたらいいなぁ。あと、どうせなら売れた数なども管理して、月の売り上げを計算したい。」

等といった言葉を賜ったとします。あくまで例です。あくまで。
正直に言います。こんなの頭の中で一度に組み立てることはできません。お客さんも長年仕事をして在庫管理アプリを思いついたのですから。

なのでこうします。(あくまで私の考えです。)

「では、欲しい機能は、在庫を管理する機能、在庫を管理する機能には、バーコード読み取り機能、品番とバーコードによる在庫数の管理、在庫の増減機能が必要ですね。そしてショッピングサイトの在庫管理ですね。最後に、出荷した数を保存し、売り上げを計算する機能が必要ですね。売上計算機能には、出荷された個数を保存する機能、出荷された商品の情報を取得して、総出荷金額を計算する機能が必要ですね」

この例はあまりきれいだとは思いませんが、こうやって、必要な機能を分割し、最小単位にまで細かくした後で、その細かな機能を実装していきます。

これは、人工知能の勉強をした人なら、もしかしたら知っているかもしれません。それです。

問題を、自分が解決できるくらいに分割することで、結果として大きな問題を解決することができます。

破壊してもよいという考えを片隅に置く

これは、上述の二つを実行するにあたって必要な考え方です。

思考がぐるぐる回ってしまう原因として、問題が複雑であるという点が挙げられます。そりゃそうか。じゃないとぐるぐる回らないよね。

この機能を実現するためには別の機能が必要、でも別の機能のためにはこの機能とあの機能が必要、そうすると…

こうなるのはよくありがちです。原因は、問題を分割しきれていない、というのもありますが、そもそも問題が、そう簡単に分割しきれないため、ということもあります。

とにかく、思考がぐるぐる回ったら自分自身に一喝しましょう

うるせぇ!!!!
とりあえずできそうなことをしろや!!

つまり、多少後から壊してもよいという考えのもと、若干問題に合わない機能を先に作り、そのあと問題に完璧にフィットしたものを作るということです。

一部の機能をばっさり切り捨てたものを作成し、あとからその機能を付け足す、といった流れです。

この考えが私的には重要だと思っています。

誰かが、
アイデアに価値はなく、アイデアを実現したものに価値がある
と言っていました。
直接関係はないですが、とにかく作れという意味では通ずるところがあります。

多少完璧でなくても、自分なりに努力して何かを作るのです。完璧にするのはそのあとからでいい。

日本人が英語を話せない理由は、英語を話す必要がないからという話があります。その通りだと思いますが、もっと小さな原因として、完璧を求めがちだから、があると思います。完璧な文法を求めるから、突然英語を話そうとしても話せない。そんな気がします。私もそう思います。これが日本人の気質なのかどうかはわかりませんが、別に失敗してもいいという考えも、多少は必要だと思います。

まとめ

ここに書いた以外にもまだいくつかありますが、大まかにはまとめられたと思います。真似をしてほしい、などとおこがましいことは言いませんが、一つの参考になればと思います。

あと、あれね、テスト前の掃除がはかどるのと同様に、問題解決に関して、問題解決に直接は関係ないけど、知ってると得しそうなことに力を注いでしまうことを避けることね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA