プログラミング的思考とは何か?
前回はプログラミング的思考について下の図の①と②について説明しました。今回は続きの③と④について説明しますので、前回の記事を読まれていない方はそちらを先にご覧ください。
プログラミング的思考の全体イメージです。①から④までを順に行いますが、途中で問題があれば前に戻って見直しながら進めます。
③各ステップを順番に実践する
次は②で考えたステップを順番に実践していきます。進め方としては各ステップが終了した時の状態(途中経過)が、想定通りとなっているかを確認しながら進めます。1つのステップでは状態を確認しづらい場合は、確認できるところまで進めてからまとめて確認します。確認した結果、想定と異なっている場合は、直前に実践したステップから順にさかのぼって原因のステップを探し、見直します。見直したら再び実践、確認し、想定通りになるまで繰り返します。要するに、途中にチェックポイントを設けておいて、間違った場合にできるだけ早く軌道修正をして試行錯誤しながら進めていくわけです。
間違い原因の探し方について、もう少し詳しくお話しします。
実はこの原因探しが以外と難しいことなのです。なぜかというと、想定外のことや問題が起きたときに「何で?おかしい、こんなはずはないのに。」という思いから前に進めなくなってしまうことがあります。「何で?何で?何で?」とただただ思うだけで、考えることができなくなってしまうのです。皆さんも何か問題が起きた時に、「どうしよう?どうしよう?」と混乱したり、「このままで大丈夫かな?」と心配したりするばかりで、冷静に振り返って対処できないことはありませんか?
そんな状況から脱するには、このあと何をすれば問題を解消できるのか、それまでにやってきたことの何がいけなくてこうなったのか、やり直すことはできるのかということを、「思う」のではなく「考える」しかないです。問題が起きてしまってからは取り返せないですから、まずはその問題の影響を最小限にすることを考えて実行し、あとで振り返って原因を考えて次に活かすことを考えるべきですよね。また、問題が起きる前に異常がわかれば、振り返って原因を考えてやり直せばいいですよね。
原因を考える上で意識すべきことを以下に挙げます。ここでは「テレビが壊れた」という問題を例にとって説明します。
ⅰ.起きている問題をできるだけ正確に把握する。「テレビが壊れた」ではなく、例えば「テレビの音が出なくなった」とか、「テレビの電源が入らない」とか、より詳細に把握します。
ⅱ.「テレビの電源が入らない」という問題に関係しそうなことで、問題のない部分を把握する。例えば「電源コードはしっかりつながっている」、「テレビの電源ランプはオレンジ色に光っている」とかです。
ⅲ.これまでの情報をもとに問題の原因を予測します。例えば「テレビの電源ランプがついているから電気は通っている。まてよ、電源はリモコンで操作していたよな。リモコンの電池がないのか?」といった具合です。
ⅳ.予測したら、その原因に対処します。ここでは「リモコンの電池を取り換える」ことが対処ですね。
ⅴ.リモコンを操作して電源が入れば予測は正しく、問題解決です。ダメなら別の原因を予測してやり直しですが、原因の可能性を1つ潰すことができました。
ⅵ.次の予測をする前に情報を収集します。次の様な情報を収集するといいです。
・いつ問題が発生したのか(a)
→ 「5分前にテレビをつけようとしたらつかなかった」
・いつまでは問題なかったのか(b)
→ 「昨日の夜10時までは問題なくテレビを見ていた」
・(b)から(a)の間に何をしていたのか
→ 「寝ていた」
ⅶ.収集した情報をもとに予測する、もしくは同様な問題が他に起きてないか調べます。このテレビの場合だと、寝ている間に起きているので、自分達に原因がない可能性が高く予測ができません。この場合はインターネットで調べれば原因がわかるかもしれません。インターネットで調べるにはメーカー、機種等の情報も加えて調べると解決するかもしれませんよね。
このように
情報の収集・整理 → 原因予測 → 原因修正 → 試す
を繰り返して、とにかく考えながら試行錯誤することが重要です。ずっと考えていてもだめですし、やみくもに試してもだめです。自分ではもうどうにも予測が立てられないぐらい色々試したのであれば、もっと詳しそうな人に頼ればいいです。その時も、自分が収集・整理した情報と試したことを伝えると相手は予測が立てやすくなります。これは人に質問するときのコツでもあります。頼られた側も、一から調べる必要がないですし、何とか助けてあげようと思うものです。
④目標達成
試行錯誤の末に何とか達成できたら、本当に目標としていた結果が得られているか確認・検証します。また、考えたステップにあいまいな点がなかったか、ステップについて今回と異なる解釈をしたら結果が変わってしまわないか、無駄なステップがなかったかも確認します。これにより、自分では正確に理解していたつもりでも、あいまいであった点などがわかってきます。
考えながら試行錯誤することが重要
プログラミング的思考について前回の分も含めて要点を挙げます。
目標はできるだけ明確にする
目標達成のステップは徹底してあいまいさ・暗黙のルールを排除する
考えるのが難しい場合は抽象化と具体化を繰り返して1つずつ考える
問題は早期に発見して原因について考えて試行錯誤する
目標を達成したらステップを振り返って確認・検証する
以上でプログラミング的思考の説明を終わりますが、どうでしょうか。実際にプログラミングをするとなると、ステップをもっと詳細に考えないとうまくいかないです。文部科学省の事例では、線を引く方向を60°曲げてもうまくいかず、120°にすればうまくいくというポイントがありますが、重要なのはその答えに行き着くまでの過程です。プログラミングができたという結果ではなく、是非、考え方を育むようにしていきたいですね。
この記事へのコメントはありません。