2020年から始まる小学校でのプログラミング教育について調べていたら、以下の論文を発見したので読んでみました。
Computational Thinking – Jeannette M. Wing (2006)
この論文には、「関心の分離」「疎結合」「エラー処理」「デッドロック」「分解」といったソフトウェア開発で活用される様々な考え方が、ソフトウェア開発に関係なく全ての人や場合において有効であるということが議論され、最後は「コンピューター科学の専門家は『コンピューター科学者の考え方』というコースを、生徒の専門分野に関係なく開催すると良い」とまとめています。
Professors of computer science should teach a course called “Ways to Think Like a Computer Scientist” to college freshmen, making it available to non-majors, not just to computer science majors.
2020年から始まるプログラミング教育で小学生に教えることになっている「プログラミング的思考」はこの論文も参考にしているようで、文部科学省が出している「小学校プログラミング教育の手引(第一版)」には同じようなアイデアが多く見られます。そのため、日本のプログラミング教育について考える際はこちらも読んでみると良いでしょう。英語ではありますが、3ページにまとまっているため、比較的すぐに読めます。
では、この論文の内容を踏まえ、日常生活でのコミュニケーションにソフトウェア開発の考え方の1つである「関心の分離」が活用できる例を考えてみましょう。
例えば、お母さんが子供におつかいを頼むシチュエーションを考えてみます。
お母さんは「ちょっと牛乳をスーパーで買ってきてくれない?」と子供に頼みます。
この状況をコードに直すと以下のようになります。
(プログラミングの経験がない方は、# で始まる日本語のコメントを読んでみてください)
まずは子供がどのように指示を受けて、どのような手順で「おつかい」という処理を進めるか、というコードです。上から下に読み進めてみてください。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 「子供」を表現するコード | |
class Child | |
# おつかいに行くためには、商品とお店の情報が必要 | |
def go_shopping(item, shop) | |
walk_to(shop) # お店に行く | |
buy(item) # 商品を買う | |
come_back(@home) # 家に帰ってくる | |
end | |
end |
ポイントは、子供はおつかいに行くために「品物」と「場所」が指示される必要があるところです。
次に、おつかいを頼むお母さんのコードは以下のようになります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
child = Child.new # 子供に対して | |
child.go_shopping("牛乳", "スーパー") # 商品情報(牛乳)とお店の情報(スーパー)を与えておつかいに行くよう指示する。 |
これで、お母さんは子供に「スーパーで牛乳を買ってくる」ように指示ができました。
さて、この頼み方について少し考えてみましょう。
お母さんは「品物」と「場所」という2つの情報をセットで与えて子供をおつかいに行かせています。しかし、もしかしたら子供は「牛乳はスーパーに売っている」ということをすでに知っているかもしれません。実際にスーパーに行ってみたら牛乳が売り切れで、代わりにコンビニに買いに行くという判断が必要なこともあるでしょう。
言い方を変えると、「お母さんが指示した場所におつかいに行く」では、子供が自分で場所を考えるチャンスが失われてしまい、状況に応じた臨機応変な対応ができるようになりません。
ここで、「関心の分離」を使います。
つまり、おつかいを頼むときに「場所」に関する情報を与えないようにし、お母さんが「どこで買うか」を気にしなくても良い頼み方に変更します。
言葉としては「ちょっと牛乳買ってきてくれない?」という頼み方ですね。
これもコードで表現してみます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 「子供」を表現するコード | |
class Child | |
# 商品の情報があればおつかいに行ける | |
def go_shopping(item) | |
shop = lookup(item) # 自分の記憶から、商品がどこで売っているかを考える | |
walk_to(shop) # お店に行く | |
buy(item) # 商品を買う | |
come_back(@home) # 家に帰ってくる | |
end | |
end |
「商品」だけを指定するようにしたことで、子供は自分の記憶から「どこで買えるか」を考えるようになりました。
こうすることによって、お母さんは「どこで」買うのかを子供に指示する必要がなくなって楽になっただけでなく、子供が状況に応じてどこで買うかをいろいろと自分で考えられるようになりました。
子供が判断できる、ということは、「スーパーになければコンビニに買いに行く」「少し遠くのスーパーが安ければそちらで買う」といった状況に応じた柔軟な対応ができるようになることを意味します。子供も成長できて一石二鳥ですね。
他にも、「今流行りのあのゲーム」のように、お母さんがどこで売っているかを知らなくても、子供が友達から仕入れた情報を基に自分で判断して買いにいけるため、お母さんが逐一売り場を知っている必要がなくなるのです。楽ですね。
他にもソフトウェア開発のアイデアをこの例に取り入れることができます。
たとえば「条件分岐」の考え方を取り入れてみると、「もしお店をひとつも知らなかったら」「もしお金が足りなかったら」「もし迷ってしまったら」など、様々な事態を事前に想定することができます。
特に異常事態については事前に想定しておき、対策を考えるようにしておくと子供もお母さんも安心しておつかいに行くことができますね。
まとめ
このようにソフトウェア開発のアイデアを日常生活にも取り入れることで、普段何気なくしていた行動や不満に感じている問題に対する改善策・解決策を考えることができます。
そして、2020年に開始する小学校でのプログラミング教育の目的は、まさにこの「日常生活をよりよくする」にあるのだと思います。「プログラミング教育」というとプログラミングを教えてプログラマーを育てることのように聞こえてしまいますが、そうではありません。
このアイデアを基にして日本のプログラミング教育がどのような指針で行われ、どのような課題が想定されるのかについては、また「小学校プログラミング教育の手引(第一版)」を最後まで読んだ上でブログにまとめてみようと思います。