Computational Thinkerを育てるには? 【Medium記事紹介】
過去に「プログラミング的思考」について書きましたが、今回は世界ではどのような表現がされているか、Computational Thinkingについてご紹介します。
日本でのプログラミング的思考
プログラミング的思考を再び引用すると、下記のようなものです。
「自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考えていく力」
(小学校プログラミング教育の手引(第二版)より)
このプログラミング的思考を簡単に読み解くと、
自分が意図する一連の活動を実現するために、
→どんなゴールを目指すのか?
どのような動きの組合せが必要であり
→どんな手順が必要か、ちいさい作業・動作に切り分けられるか?
一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、
→手順を組み合わせて並べるにはどうすればよいか?
記号の組合せをどのように改善していけば、より意図した活動に近づくのか、
→どうしたら動かないものを動くようにできるのか?
といったことを論理的に考えていく力」
(小学校プログラミング教育の手引(第二版)より)
といった具合に考えていけば段々と読めてきます。
Computational Thinking
映像にもある通り、Computational Thinkingとは、単純なプログラマーの考え方や、エンジニアリングの方法でもありません。
それは「問題解決」のための思考方法なのです。大きく分けて4つの要素が紹介されているので、これからそれぞれについてご紹介します。
1.Decomposition(要素に分解する)
2.Pattern recognition(規則性を見つける)
3.Abstraction(抽象化する)
4.Algorithm design(解決のための順序を設定する)
1.Decomposition(要素に分解する)
大体の課題・問題・プロジェクト、というのは複雑で一見手をつけにくい印象を受けてしまう。
そのときに必要となるのがこのDecomposition、つまり、自分たちができる範囲での要素に、大きく複雑で良くわからないものを切り分けていくことです。
「わかる」ことの語源は「わける」とも言われています。
何ができて、何ができないのか。
どれをやれば、つぎになにができるのか。
わけていくことで、その問題の全容を把握することに繋がり、
自然と「できそうじゃないか!」という認識に変わっていきます。
これは、プログラミングにおいても同様で、
あるアプリやゲームを作るとなったときに、例えばインベーダーゲームだったら、
・砲台を動かすことができる
・ビームを打つことができる
・宇宙人は絶えず動き続ける
・たまに宇宙人がこちらにも攻撃してくる
・宇宙人が人類の基地に到達したらゲームオーバー
という一連の流れがある仲、それら一つ一つのプログラムを書いていくわけです。
2.Pattern Recognition(規則性を見つける)
2つのものを並べたときに、類似点と相違点の2つが見えてきます。
その中でも、共通するものを見つけてその原型を作っていくだけで、
覚えることは飛躍的に少なくなり、問題解決までの道のりを加速させます。
実際にコンピュータサイエンスで学びを作っていく場合には、
まずは教員がやってみて、その後時間と余裕があれば人工知能にまかせて観察する、というのも面白そうですよね!
3.Abstraction(抽象化する)
不要な具体的部分をどんどん削ぎ落としていって、残ったもの。
これこそ、抽き出す(手で摘んで引っ張り出す)
ということでしょう。
抽象化、というと一言にまとめるだとか、直接「抽象化しなさい」といってもなかなかわからないものです。
このプロセスを介することによって、一つ一つのプログラムが洗練されていきます。
4.Algorithm design(解決のための順序を設定する)
そして、最後にパターン化され、そして抽象化された一つ一つの手順、
まさにプログラムをどのような組み合わせで、どのような順序に設定するかを決めるのが、最後のアルゴリズムデザインです。
実際に解決までに道筋は一度ですべてを決めてできるわけではありません。
しかし、アイディアを出したり、試行錯誤をしながら順序を決めていくような流れにしていくことで、解決への道順を模索します。
Computational Thinkingとプログラミング的思考の親和性
基本的にここまでを読んでいくと、
Computational Thinkingと、プログラミング的思考は、
だいたい同じことのように思えてきます。
問題解決の方策は様々ではありますが、
プログラミング的思考はどちらかといえばSolution、つまり、
「解決策」と「解決への道のり」への考え方を示してくれる。
それがComputational Thinking、もしくはプログラミング的思考と言えそうです。