プログラミングで論理的思考力を身につけられる本当の理由
子どもにプログラミングをやらせると良い理由、の中に必ず入るのが、論理的思考力が身につけられる、というものです。
一方で、IT業界でエンジニアを志す場合には論理的思考力が必須とも言われます。
鶏と卵ではないですが、プログラミングをするから論理的思考力が身につくのか
論理的思考力があるからプログラミングができるのか、
一体どっちなの?という疑問もあるものの
子ども向けの話をする場合にはあまり本質的ではないので
ここでは、プログラミングは論理的思考力を伸ばすもの、と捉えてみます。
プログラミングをすると論理的思考力が伸びる、という話は、何をプログラミングと定義するのかによって少しずつ話が変わってきます。
私自身の定義では、プログラミングとはアーキテクチャと仕様が決まった後のフェーズを指すので
プログラムに対して、どんなインプットがあり、プログラムを実行した結果として、どんなアウトプットをするのか
が既に決まっている状態からスタートします。
この定義の上では、プログラミングとは、インプットを元に、何の命令をどの順番で実行するのか、を決めて、実際にそのように命令文を記述すること
となります。
いわゆるアルゴリズムと言われるものを考えるところと、実際にプログラミング環境の中でコンピューターに命令を送り届けるところ、の2つを実施するわけですね。
ここで論理的思考力が身につくというのは、アルゴリズムを組み立てるところを指します。
仕様が複雑になるほどアルゴリズムも複雑になるので、それをシンプルに解いていくことができなければ、うまく動かなかったり、期待するパフォーマンスが出なかったり、メンテナンス性が悪かったり、といった問題がたくさん生まれてしまいます。
だから、プログラミングには論理的思考力が非常に重要ですし、プログラミングの中で試行錯誤を繰り返すことによって、少しずつ論理的思考力を向上させることができるようになります。
子どものプログラミング学習に関しても、一般的にはこのような観点から語られているものと考えています。
それは間違っていないし、実際の効果も高いと思っています。
ですが、プログラミング経験者の一人として
論理的思考力を伸ばすならプログラミングよりもむしろデバッグの方が有効
ということを伝えしたいです。
プログラムが意図しない動きをしたり、エラーが起きてそもそも動かないときに、その原因を突き止めて修正し、正常な動きに戻すことをデバッグと呼びます。
システム開発の現場では、デバッグは非常にストレスフルな作業です。
クリティカルな問題であるほど時間制約が厳しいですし、仮説を間違えると膨大な時間やお金がかがったりします。
単にアルゴリズムを組み立てるときと比べて
デバッグのときに使う論理的思考力の方が圧倒的に高度なものが求められるのです。
なぜなら、最速で答えに辿り着かなければいけないから。
ものすごいプレッシャーの中で体験するほど、論理的思考力は必然的に高めることができるようになりますね。
私自身も、論理的思考力の基礎はデバッグで身につけたと考えていますし、やればやるほど、面白い分野でもあります。
コンピューターの世界においては、エラーには必ず原因があるので、どんなに難解だと思っても答えに辿り着くことができます。
パズルゲームと同じで、答えがあると分かっているから、安心して楽しめる良さがあります。
その観点から子ども向けのプログラミングを捉えてみると
デバッグの機会が少ないんですよね。
Scratchのようなブロック型言語では、そもそもエラーがおきません。
また、とても簡単な作りになっているがゆえに意図しない動き、というのもなかなか体験し辛いのです。
自分の作りたいものを作ることに集中できるように、あえて簡単な作りにしているのだと思いますが
親切すぎる環境は、子どもの学習においてもったいない。
意図しない動きをするプログラムをどうやって改善するか?
を考えて試すプロセスをあえて体験させることは、学習においてとても重要だと思います。
例えば、あえてバグだらけのプログラムを与えて
制限時間内に改修すること、という学習プログラムがあれば、絶対に論理的思考力を伸ばせるはずです。
デバッグ大会なんてあったら、論理的思考力も精神力も、どっちも高められて良さそうですが、マニアックすぎて受け入れられない…かも?