2020年から「プログラミング教育」が始まり、その中で「プログラミング的思考」が重要だということが語られています。
お国(文部科学省)での、「プログラミング的思考」の定義は、
「自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、 より意図した活動に近づくのか、といったことを論理的に考えていく力」
だそうです。
今回は、その「プログラミング的思考」が「学習」に及ぼす影響について少し考えてみます。
(プログラミング的思考)
・物事を考える時にその物事の動作や順序を理解し、効率的に意図した動作や結果を導くために論理的に考える力のこと
・物事の「目的(意図)」を的確にとらえ、合理的に考えることができるようになる。
・プログラミング的思考で5つの能力が身につく(「抽象化」「分解」「一般化」「組み合わせ」「シミュレーション」)
>抽象化
複雑な問題やシステムを簡単にし、一般的な観点から理解しやすい形にする能力。具体的な詳細を省き、問題の本質に焦点を当てることで、適用範囲を広げることができる。プログラミングだけでなく、数学や物理学などの他の科学的分野でも重要。
>分解
大きな問題を小さな問題に分割する能力。全体の問題が解決不可能に見える場合でも、それぞれを個別に扱うことで解決することができる。プロジェクト管理やタスク管理にも応用できる。
>一般化
特定の問題解決策を他の類似した問題に適用できる一般的な解決策に変換する能力。新たな問題に直面した時でも、既存の知識を適応させることができる。
>組み合わせ
異なる要素を組み合わせて新たなものを作り出す能力。新しいアイデアを生み出したり、既存のシステムを改善したりするために使用される。
>シミュレーション
あるシステムやプロセスが実際にどのように動作するかを予測する能力。新しいシステムを設計したり、既存のシステムを改善したりするために必要なスキル。実際に何かを実行する前に、予想される結果を確認することができる。
(メリット)
・問題解決スキルの向上
・効率性の向上
・創造性の促進
・理解の深化
(デメリット)
・過度な抽象化
抽象化は有用なツールだが、過度に抽象化すると、問題の詳細が見落とされ、解決策が現実的でなくなる可能性がある。
・リソースの過剰な使用
全ての問題がプログラミング的思考で解決できるわけではない。簡単な問題に対しても複雑な解決策を適用しようとすると、時間やリソースを過剰に消費する可能性がある。
・創造性の制約
論理的で体系的なアプローチを強調するが、これが創造的な思考や直感を阻害する可能性もある。
といったことですね。
スキーマの習得や、クリエイティヴィティ、知的技能、、、等、すごいですね!
ただ、よく言われてるのは、「ロジカルシンキング」との比較らしく、
「ロジカルシンキング」との違いは、順序立てて考えるだけでなく、その順序やプロセスがいかに「効率的がどうか」ということのようです。
となると、「ロジカルシンキング」に「クリティカルシンキング」の「効率」を加えて、、、、みたいな感じですかね?
まぁ、何とかシンキング、、などというモノは、どれもほぼ同じですからね?
”道を歩けば「ロジカルシンキング」にあたった”時代からすれば、少しはマシな気もしますし、インストラクショナルデザインの2大要素(?)である、「効果」と「効率」を考えているので、それなりに ”いい考え” のようにも思います。
しかし、問題は、小学生や中学生にこのような「思考」を”押し付ける”ことと、その「方略による弊害」はかなりあると考えるのです。
「学習者」がこのような「思考」を身につけ、
・自分で考え
・自分で創り出し
・自分で答えを出すこと
は、何も悪いことでありませんし、教育デザインはそれが大きな目的です。
しかし、そこには、
「誰もが」、「意図的」ではあるが「さり気なく」、常に方向性を「修正」でき、「ゴール」にたどり着く
という「方略」があって初めて成立することだと思うのです。
現在の「方略とも呼べない方略」、
プログラミングをやれば、「プログラミング的思考」を身につけることができる!
は、正論でしょうか?
勿論、中にはプログラミングを通して身につける人もいるでしょう。
しかし、そうではない人もいる、、、かもしれない、、、
それでは、教育のデザインにはならない、、、ということです。
また、「課題を与えられてプログラムを組むという作業」は、「やりたくもない宿題」や、会社での「やっつけ仕事」と近い行為です。
課題など与えずに、自由にプログラミングをやらせればいいのですが、そういうわけにもいかず、例題、サンプルを大量に用意して、ひな形を修正するようなモノばかりで、、、
そこでは、「コピペ」が大きな部分を占めます。
このことは、「学習」においては非常に弊害になるように思うのです。
確かに、完成すればある程度の「達成感」はあるでしょう、しかし、所詮はサンプルを大部分「コピペ」してできたモノ、、、。
ChatGPTに指示してプログラムを作らせる、、、というのもあるでしょうね?
その際、仕様を自分で考えるようにするならまだいいのですが、、、難しいですね。
つまり、何が言いたいかというと、
お国が提唱している「プログラミング的思考」というものは、
”単純にプログラムを作らせることだけ”
では生まれないし、
大きなメリットであるはずの、「効率」が「コピペ」になってしまうのではないかという危惧です。
そして、それは、「学習」にとって、決してプラスにはならないと思うのです。
「プログラミング的思考」が重要というなら、何故、それを習得させるデザインをしないのか、、、、???
まぁ、「プログラミング的思考」ができない人が提唱しているのでしょうね、、、。