論理的思考

プログラミングの上達に欠かせない処理分解の能力とその鍛え方

プログラミングの上達には「処理分解」という能力が不可欠です。処理分解とは、複雑な処理の流れを単純な要素に分解することです。

今回は、プログラミングにおける処理分解の考え方についてご紹介します。

プログラムは単純な処理の連続である

プログラムは単純な処理(命令)の連続で構成されています。

例えば「ファイルを開く」「画面に(文字や画像を)表示する」「計算する」などです。

プログラミング言語を学んだことがある方なら、最初にこのような命令を覚え、それらを組み合わせて簡単なアプリを作った経験があるかもしれません。

この考え方は非常に重要で、プログラムがどんなに複雑になっても、その基本は単純な処理の組み合わせでしかないのです。

補足

プログラムを極限まで分解すると、「逐次処理」「分岐」「繰り返し」の3要素だけになります。

世の中の全てのプログラムが、たった3要素から構成されているというのは、ちょっと驚きですよね。

プログラミングは複雑な動きをシンプルにするところから

プログラミングは複雑な動作をシンプルにするところから始まります。

高度なプログラミングになるほど、ものごとを複雑に捉えたままでは、成果物がバグだらけになってしまったり、そもそも完成が難しいことがあります。

そのため、まずは全体の動作を分解して処理の流れを整理することが重要です。

処理分解の考え方

例えば、ポーカーの役を判別するプログラムを考えてみましょう。

ポーカーにはワンペア、ツーペア、スリーカード、フルハウスといった役が存在します。(実際にはもっと多くの役がありますが、ここでは4つの役に絞って説明します)

人間であれば見た瞬間に判別できますが、プログラムは1枚ずつカードを解析する必要があります。

ポーカーの役

  • 同じ数字が2枚:ワンペア
  • ワンペアが2組:ツーペア
  • 同じ数字が3枚:スリーカード
  • ワンペア+スリーカード:フルハウス

その場合の処理の流れを整理してみましょう。

各処理の()内には、主に使用されるコンピューター命令について記載します。

  1. ワンペアがあるか?(カウント)
  2. 上記が2枚あったらペアの数を+1する(足し算)
  3. 上記が3枚あったらスリーカードの数を+1する(足し算)
  4. 上記で一致したカードを除外する(削除)
  5. 手順1~4をカードがなくなるまで繰り返す(繰り返し)
  6. 手順2の数が1だったらワンペア、2だったらツーペアとする(比較)
  7. 手順3の数が1だったらスリーカードとする(比較)
  8. 手順2の数が1かつ手順3の数が1だったらフルハウスとする(比較)

プログラミングする場合はここまで細かく分解しなくてはいけません。

このように処理の流れをプログラム的に分解したものを「アルゴリズム」や「ロジック」と呼びます。

正解は一つではない

ロジックの正解は一つではありません。

上述のポーカーの例では、例えば先にAが何枚、2が何枚というように数えておいて、カウントが「2」となった数字が1つならワンペア、2つならツーペア、というような判別法も考えられます。

どのようなロジックを構築するか(効率良い方法を考え出せるか)は、プログラマーの腕の見せ所と言えるでしょう。

処理分解の力はどうやって鍛えるか?

処理分解の力を鍛えるにはどのようにすれば良いでしょうか?

処理を分解する能力を磨くためには、まず論理的思考力を鍛えることが重要です。実は処理分解は、論理的思考の考え方の一部です。

論理的思考を鍛えることで、処理分解の能力も自然と身につきます。

論理的思考はプログラミングの基礎とも呼ぶべき能力であり、学んでおくと大いに役立つでしょう。

論理的思考についてはこちら記事をどうぞ。

-論理的思考