sakura
これからの社会で生きていくためには,どのような資質・能力が必要なのでしょうか。
それは,以下の三つです。

  • 情報を読み解く力
  • 情報技術を活用して論理的・創造的に問題解決・価値創造する力
  • 感性を働かせながら,よりよい社会や人生の在り方について考え,学んだことを生かそうとする態度

必要な資質・能力の一つは,「プログラミング的思考」です。

「プログラミング的思考」

自分が意図する一連の活動を実現するために,どのような動きの組合せが必要であり,一つ一つの動きに対応した記号を,どのように組 み合わせたらいいのか,記号の組合せをどのように改善していけば,より意図した活動に近づくのか,といったことを論理的に考えていく力

例えば,「将来を予測し,仮定して行動を決める論理的な考え方」が考えられます。

「プログラミング的思考」は,プログラミング教育の中核であり,見方・考え方,態度を身に付け,問題解決ができるようになることを目指しています。






1 論理的・創造的に考え問題解決し価値を創造するプログラミング的思考

別稿で述べたように,情報化が進展する社会では,次の資質・能力が特に重要になります。

  • 情報を読み解く
  • 情報技術を手段として使いこなしながら,論理的・創造的に思考して課題を発見・解決し,新たな価値を創造する
  • 感性を働かせながら,よりよい社会や人生の在り方について考え,学んだことを生かそうとする

本稿では,二つ目の「情報技術を手段として使いこなしながら,論理的・創造的に思考して課題を発見・解決し,新たな価値を創造する」力について,特にその中心となる「プログラミング的思考」について考えます。

議論の取りまとめでは,プログラミング的思考を次ぎように説明しています。

自分が意図する一連の活動を実現するために,どのような動きの組合せが必要であり,一つ一つの動きに対応した記号を,どのように組み合わせたらいいのか,記号の組合せをどのように改善していけば,より意図した活動に近づくのか,といったことを論理的に考えていく力

出典:小学校段階における論理的思考力や創造性,問題解決能力等の育成とプログラミング教育に関する有識者会議「小学校段階におけるプログラミング教育の在り方について(議論の取りまとめ)」平成28年6月16日, [online]http://www.mext.go.jp/b_menu/shingi/chousa/shotou/122/attach/1372525.htm(参照2017-3-1)

2 プログラミング的思考のイメージ

(1)命令が必要なコンピュータ

私たち人間は,正面に障害物があれば,それを回避できます。

ごく自然に主体的に判断して行動できます。

しかし,コンピュータは,命令がなければ自分で判断できません。

壁があってもひたすら前に進もうとします。

やがて壁を壊すか,コンピュータ自身が壊れるでしょう。

 

一般的なコンピュータのプログラミングの場面を考えます。

自動運転の模型自動車が,動いています。

正面に迫り来る壁を感知しました。

その壁を回避する必要があります。

そのためには,模型自動車は次のことができる必要があります。

  1. 壁を見る。
  2. 壁が「有るか,無いか」の情報を得る。
  3. 壁に突き当たったら,どうするかを命令する。
  4. 壁にまだ突き当たっていなければ,どうするかを命令する。

このような動作ができるために,衝突を回避する自動車には,画像や電磁波の情報を判断し処理する命令がプログラムされています。

現在,探査にはミリ波レーダーや赤外線が使われます。

単眼のデジタルカメラやデジタルステレオカメラも使われています。

将来の自動車には,カメラやレーダーが四方八方にあり,情報を瞬時に判断し命令して車が安全に動くシステムが備わるでしょう。

自動運転でこれらを一瞬にできるようにするには,人間の作るプログラムが必要です。

コンピュータは,命令がないと動けず,プログラムに書かれてないことはしません。

思ったように動かないのは,プログラムの作り方や記述のミス(バグ)が原因です。

次に,実際にプログラムを作る場面を考えてみます。

(2)プログラムを作るときに使う考え方

① if 〜 else文 – 条件分岐のプログラム

「if 〜 else」文の命令があります。

「正面に壁があったら,右に行きなさい。」というある条件の時に何かをさせるときに使う命令です。

「if 〜 else」文は,条件式を満たす「真(true)」のとき,条件を満たさない「偽(false)」のときの両方で,それぞれ何かの処理をさせるときに使います。

if(壁はありますか。ないですか。) {
有るなら,右に曲がって進みなさい。
} else {
無いなら,そのまま真っ直ぐ進みなさい。
}

② 条件分岐の命令を作るときに考えること

if 〜 else文 – 条件分岐の命令を書くときは,実際には起こっていないが,起こる場面を具体的に想定します。

予測して,どう行動させるかを考えます。

将来を予測した行動です。

プログラムの世界では,将来の予想はほぼ正確にシミュレーションできます。

したがって,プログラムを作る際には,将来起こりうる事象や行動を正確に具体化して考えることになります。

(3)汎用性を求める「的」

闇雲に動いても,問題は解決しないことが多いものです。

将来を具体的に予測して行動を考える態度」が身に付いている人は,効率的計画的な行動がとれるでしょう。

先の例では,「仮定を設定する論理的な思考」も働いています。

数学的に思考するときに,「仮定」をすることがあります。

図形の証明を考えるとき,「もしできたとしたら」と仮定すると,証明の鍵に気付くことがあります。

「7日は,ラッキーな日だ。」のような判断できない仮定ではありせん。

「1/3は,有理数だ。」(命題)という数学的に真偽を明らかにできるものです。

例外を許さない論理的な考え方です。

プログラムで「壁があれば,右へ…」と記述すれば,自動車は壁があれば例外なく右へ行きます。

もし,右が行き止まりであれば,自動車はそこで立ち往生です。

プログラムには,命令すれば確実に実行する前提があります。

プログラミングの際に仮定した将来の動きは,確実に保障されます。

だから,プログラミングでは,論理的な思考が保障されます。

このプログラミングの思考方法を生活に生かせば,将来を予測しながら行動するなど,論理的に考える生活が送れると考えられます。

このような汎用できる考え方という意味から,「プログラミング的思考」には「プログラミング思考」に「的」が挿入されています。

3 見方や考え方,態度,問題解決力の育成

先の例のように,if 〜 else文なら,

「将来を具体的に予測して行動を考える態度」

「将来を予測し,仮定して行動を決める論理的な考え方」

これらの資質・能力の育成が考えられます。

他にも,for文やwhile文で同じ処理を繰り返す時に使う命令があります。

日常生活の中には,同じ手順で進めることが多々あります。

それらを「繰り返し」とみると,整理できたり合理的に進めたりできることがあります。

算数科の学習内容である筆算は,一定の手順の繰り返しです。

筆算の手順で計算してよい意味が理解できれば,あとは機械的に筆算に習熟できるようにします。

プログラミング的思考の学習例として,筆算の学習を通して「繰り返しはないか」を見る見方を育成できると考えられます。

このように,プログラミング的思考は,見方・考え方,態度を身に付け,問題解決に生かせるようにすることを目指しています。






1 これからの時代に求められる資質・能力のキーワードに「プログラミング的思考」があります。

2 「プログラミング的思考」をすれば,より一層論理的・創造的に考え問題解決し価値を創造できるようになります。

3 その具体の中には,「将来を具体的に予測して行動を考える態度」と「将来を予測し,仮定して行動を決める論理的な考え方」が含まれます。

4 プログラミング的思考は,見方・考え方,態度を身に付け,問題解決ができるようにすることを目指しています。

小学校段階における論理的思考力や創造性,問題解決能力等の育成とプログラミング教育に関する有識者会議「小学校段階におけるプログラミング教育の在り方について(議論の取りまとめ)」平成28年6月16日, [online]http://www.mext.go.jp/b_menu/shingi/chousa/shotou/122/attach/1372525.htm(参照2017-3-1)