経験者が解説!プログラミングで論理的思考力は身につく?

「プログラミングって本当に論理的思考力が身につくの?」という疑問をプログラミング経験者の私が解説します。結論から言えば、つきます

プログラミングは「コンピューター語に翻訳して命令する作業」

まず、そもそもプログラミングとは何ぞや?という話からします。答えは、「コンピューターが分かる言語に翻訳したうえで、コンピューターに命令する作業」のことです。

実は、コンピューターは私たち人間のように自分で考えることは基本的にできません。でも、コンピューターは実際に動いていますよね?それは、人間が「こうなったらこう動きなさい!」とコンピューターにあらかじめ命令しているからにすぎないのです。もし、自分で考えて勝手に動くことができたら、それはもうターミネーターに近いですね。

しかし、コンピューターは私たちが話すような言語を理解できません。コンピューターはコンピューター語しか分からないのです。でも、私たちがコンピューター語を勉強するのはまず不可能です。そこで、私たちが日常で使っている言語をコンピューター語に翻訳するための方法としてプログラミング言語を使います。プログラミング言語を使って、コンピューターにやってほしいことを命令する作業をプログラミングといいます。

プログラミングで論理的思考力は本当に身につくの?

さて、プログラミングというものがなんとなく分かったところで、本当に論理的思考力が身に付くのでしょうか。論理的思考力とは、物事を順序立てて考える力のことですが、実は、論理的に考えないとプログラミングは上手くできないのです。

ルールは基本的なものしかない

例えば、「テストAとテストBの得点の一方が80点未満ならCを不合格とする作業」をコンピューターに命令したい場合を想像してください。「テストAとテストBの得点の一方が80点未満ならCを不合格にしてね」とコンピューターにそのまま言っても残念ながら理解してくれません。だから、コンピューター語に翻訳して指示してあげる必要がありました。

実は、プログラミング言語によって翻訳のルールというものが決まっています。例えば、「AはBとする」は「A=B」、「AとBの合計」は「A+B」、「もしAがB未満なら」は「if(A<B)」という風にすると決まっているのです。これに従えば、「Aが80点未満ならCは合格とする」とは、「if(A<80) C=合格」といった感じで翻訳できますね。if(A<B)とA=Bの組み合わせで表現できるわけです。

いやいや、組み合わせなんて使わずとも、「もしAがB未満ならCはDとする」というルールを使えばいいでしょ?と思われるかもしれません。しかし、このようなルールは基本的なものしか用意されていません。なぜなら、そんなものまでいちいち用意していたらキリがないからです。

仮に、「もしAがB未満ならCはDとする」というルールを作ったとします。それなら、「もしAがBより大きければCはDとする」もなければおかしいですよね?その理屈でいけば、「もしAがB以上ならCはDとする」、「もしAがB未満ならCはDとEの合計とする」、「もしAがB以上ならCはDとEとFの合計とする」…とルールが非常に膨大になってしまいます。だから、これ以上分解できない最小単位のものしかルールは基本的に用意されていないのです。私たちはそれを上手に組み合わせていくことが必要なのですよ。

ルールをどう組み合わせるかというパズルゲーム

「テストAとテストBの得点の一方が80点未満ならCを不合格とする作業」の例に戻ります。「もしAとBの一方がC未満なら」や「CはAとBの一方とする」というルールは残念ながら用意されていません。ですから、「もしAとBの一方が80点未満なら」を「if(AとBの一方<80)」というようにすることはできません。だから、「AとBの一方」の表現も翻訳してあげないといけないのです。

では、どうすればよいのでしょう?そう、AとBのうち低い方の得点をMとして、①「もしAがB未満ならMはAにする」⇒②「もしBがA未満ならMはBにする」⇒③「もしMが80点未満なら不合格とする」というように分解してあげればいいですね。このように、必要な作業を1つ1つ小分けに分解して順序立てていかないとプログラミングはできないのです。

全ての場合を指示する必要がある

…しかし、これでは不十分なことにお気づきですか?そう、もしA=Bだったらどうするのでしょうか。コンピューターは命令に本当に忠実に動きます。逆に、コンピューターは自分では一切考えられません。だから、全ての場合の指示を教えてあげないといけません。

この例の場合、②と③の間に「A=Bの場合はAをMとする(BをMとするでもオッケーです)」という指示がないとコンピューターはどうしてよいのか分からずに止まってしまうのです。「コンピューターは人の思った通りには動かない。プログラムの通りに動く。」のです。

このように、プログラミングをするときは起こりうるすべての場合を過不足なく考える力も必要になってくるのです。MECE(ミーシー)みたいなものですね。

ちなみに、先ほどの問題の解答例としては、

if(A<B)M=A; if(A>B)M=B; if(A=B)M=A; if(M<80)C=不合格;となります。

(※他にも表現方法はいくつかあります。あくまで解答例です。)

まとめ

プログラミングでは、物事を1つ1つ順序立てて考える力や過不足なくすべての場合をリストアップできる力などが要求されます。このおかげで、論理的思考力が身につくのですね。でも、学校の授業でプログラミングをするわけではなく、受験勉強のためだけにわざわざ自分でプログラミングをする必要まではないと思います。

広告
カテゴリー別記事一覧
広告
トップへ戻る