秋元通信

プログラミング教育とプログラム思考

  • 2018.5.24

昨年、文部科学省が告示した新学習指導要領では、平成32年度より小学校プログラミング教育全面実施が明らかにされました。
今回は、新学習指導要領に登場したプログラミング教育を紹介しつつ、プログラム思考について考えましょう。
 
 
勘違いされている方も多いのですが、今回、小学校にて導入されることが決定したプログラミング教育とは、プログラム言語を覚えるための教育ではありません。
参考までに、実際のプログラムの例を挙げましょう。以下は、ExcelVBAとGoogleAppsScript(Googleスプレッドシート)です。どちらも、セルA1の内容を、セルD5にコピーするプログラムです。
 
 

※ExcelVBAの場合

Sub セルのコピー()

Worksheets(“Sheet1″).Activate
With Worksheets(“Sheet1″)
.Range(“A1″).Copy
.Range(“D5″).Select
.Paste
End With

End Sub

※GoogleAppsScriptの場合

function セルのコピー(){

var sheet = SpreadsheetApp.getActiveSheet();
var fromCopy = sheet.getRange(‘A1′);
sheet.getRange(‘D5′).setValue(fromCopy);

}

 
 

『(プログラミング教育とは)子供たちに、コンピュータに意図した処理を行うように指示することができるということを体験させながら、将来どのような職業に就くとしても、時代を超えて普遍的に求められる力としての「プログラミング的思考」などを育成するもの。コーディングを覚えることが目的ではない』

 
 
これは、新学習指導要領の概要をまとめた資料から抜粋したものです。『コーディングを覚えることが目的ではない』と明確に書かれているとおり、先に挙げたようなプログラム言語を覚えることが目的ではないと、明確に釘を差しています。
 
では、プログラミング的思考とは、どんなものなのでしょうか。
これも、定義されています。
 

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

 
 
分かるようで分からない説明ですね…
では、プログラム思考(※「プログラミング的思考」と同義です)について、一例を上げましょう。
 
あなたの目の前に、ボールペンが一本あります。
そのボールペンを手に取り、反対側の手に持ち替えます。
 
特に悩むことも考えることもなく、ごく自然に行うことができる動作です。しかし、この一連の動作をプログラムにしようとすると、実はなかなか大変です。

  • 「ボールペン」をどのように認識するのか? 眼の前に、鉛筆やノートもあった場合、どのように区別するのか?
  • ボールペンの「位置」をどのように認識するのか?
  • ボールペンを「手に取る」とは、どのような動作なのか?右手、もしくは左手?どの指を使うのか?
  • 「反対側の手」はどこにあるのか?
  • 「持ち替える」とは、どのような動作なのか?手のひらに置くのか、それとも指で掴むのか、それとも握るのか?

ざっと挙げても、これだけの動作を定義し、かつ適切な順番で実行する必要があります。
また、イレギュラーが発生した場合、例えばボールペンが無かった場合や、反対側の手が使えない状態にあった場合(他のものを握っているケースなど)のイレギュラー処理も用意しておく必要があります。
 
眼の前にあるボールペンを手にとる際に、『あのボールペンまでの距離は43cmだから、右手を秒速10cmで 座標軸(x,y,z)=(0,-40,-20) に動かして…』なんて考えるひとはいないでしょう。ところが、プログラムを作成する際には、動きひとつひとつを正確に定義する必要があるのです。
 
プログラムを書いていると、さまざまなエラーに悩まされます。プログラミングにおけるエラーは、大きくふたつに大別されます。実は、エラーにこそ、論理的思考を育む大切で有効なポイントがあるのです。
 
ひとつめのエラーである構文エラーとは、プログラム言語の書き方にも問題があるエラーです。
例えば、「Copy」を「copi」と書き間違えるようなスペルミスを筆頭に、プログラムを学ぶ上で最初の障壁となるのが構文エラーです。プログラムも言語である以上、正しい文法が求められます。会話であれば、「ワタシ、ご飯、食べる」といったカタコトでも意味は通じるかもしれませんが、プログラミングでは正確な文法に基づいていることが求められます。
構文エラーを起こしたプログラムは、動かないか、動いたとしても途中で停止してしまいます。
 
もうひとつのエラーが、論理エラーです。
プログラムの文法は正しい、つまり構文エラーは起こしていないものの、思い通りの動きをしないケースが論理エラーです。
 
 
例えば、住所から市区町村の市の名前だけを書き出すプログラムを作成するケースを考えます。対象となる住所の文字列を検索し、「都」、「道」、「府」、「県」の文字の次にある「市」の文字を検索し、その間にある市名だけを書き出すようにプログラミングしたとしましょう。
 
このプログラムに、どんな論理エラーが潜んでいるか、考えてみましょう。
 
「東京都八王子市高尾*****」
この住所の場合、「都」と「市」の間にある、「八王子」を書き出すことが可能です。つまり、問題はありません。
 
「三重県四日市市諏訪町*****」
この住所の場合、「県」と「市」の間にあるのは、「四日」です。書き出したいのは「四日市」ですから、適正に書き出せていません。同様のエラーは、「千葉県市川市」などでも発生します。
 
論理エラーは、考え方の間違いです。構文エラーはルールの間違いですが、ルールはプログラム言語によって異なります。しかし、論理エラーはどんなプログラム言語においても、共通の対処能力を求めます。
 
 
2020年に小学校で導入されるプログラミング教育では、コーディングを原則として行いません。
しかし、プログラムを書かないでプログラムを学ぶとは、どのような方法を取るのでしょうか?
実際の小学校教育で使われるカリキュラムはまだ不明ですが、世の中にはすでに「プログラミング言語を知らずともプログラムを作成することができる」ツールが登場しています。そのひとつ、「Scratch」をご紹介しましょう。
 
 
「Scratch」では、例えば「Copy」や「Paste」と言った命令文の代わりに、さまざまな形や色のパズルピースを使います。
パズルピースはそれぞれデコボコがあり、デコボコが噛み合わないをパズルピース同士はプログラムのつながりとして成立しません。つまり、「パズルピースが噛み合わない」=「構文エラー」を表しているのです。
パズルピースの色は、命令の種類を表しています。
青は「動き」、紫は「見た目」、赤紫は「音」で、水色は「調べる」と言った具合です。もちろん、IF文のような条件分岐も用意されています。

『Scratch』のプログラミング画面です。真ん中にある色とりどりのパズルピースが、プログラムの命令文に相当、右側にパズルを組み上げていくことで、プログラムが完成します。※クリックで画像は拡大します。

『Scratch』のプログラミング画面です。真ん中にある色とりどりのパズルピースが、プログラムの命令文に相当、右側にパズルを組み上げていくことで、プログラムが完成します。

 
「Scratch」で、動くプログラムを創ることは簡単です。パズルピースが組み上がれば、必ず動くわけですから。しかし、自分が望む動きを実現させることは意外と難しいです。
 
「この考え方じゃ駄目なのか…」
「なるほど、こう考えれば良いんだね!」

 
まさに、プログラム思考(論理的思考)を身につけるにうってつけのツールと言えます。
 
 
最後に、あるエピソードをご紹介しましょう。
私が、以前ある先輩プログラマーから教えてもらったエピソードです。
 
「スペシャルなプログラマーって、どんなひとだと思う?」
彼女の質問に、私は答えました。
 
「要求された仕様を実現すること…、はアタリマエだから、バグ(エラー)を出さないこと。そして、簡潔で分かりやすいプログラムを書けることですかね?」
 
「確かにそれは大事なこと。でも、それは凡才プログラマーの条件ね。スペシャルなプログラマーの書くプログラムには、必ず『遊び』があるの」
 
遊び?
 
「プログラミングの基本は、最短経路のプログラムを書くこと。プログラムの文字数が増えれば増えるほど、バグの可能性は高まるし、一般的には処理速度も落ちるからね。
でも、そういうプログラムは融通が利かないの。
例えば、お客さんが将来『こういうこともしたいんだけど!』って機能拡張を求めた時に、融通が利かないプログラムは、最悪ゼロからすべてを書き直す必要に迫られることもある。

ところが、スペシャルなプログラマーは、お客様の意図や将来のビジョンまで先読みして、『このプログラムは、こんな機能拡張を求めるかもしれない』って考えるの。
そして、そういう機能拡張のための『遊び』を予めプログラムに用意しておくのよ」

 
このエピソードを聞いた時、私は、ああ、これはビジネスの話、例えば戦略立案や事業企画の話とまったく同じだな、と感心しました。
 
先に挙げた「Scratch」は子供向けのプログラムですが、実はプログラム言語を覚える必要のないプログラミングプラットフォームは、Googleなどがすでにリリースを開始しています。
 
皆さまも、新人教育の一環や論理的思考のトレーニングとして、プログラム教育に挑んでみてはいかがでしょうか。
意外と楽しいものですよ!
 
 

『Scratch』でプログラミングする様子

 
ぜひ音声つきでご覧ください。
 

 
 

Scratchで作成したプログラムの例

 
※Scracthを楽しむためには。FLASH Playerが可動する環境が必要です。GoogleChromeなどでは可動しません。
 
【使い方】
キーボードは、半角英数モードで利用してください。
「Space」キーを押すと始まります。
猫をマウスポインターで触ると、猫が逃げます。「p」キーを押すと猫が大きくなります。「s」キーを押すとプログラムがストップします。

 
 
 

参考

「教育の情報化の推進」 文部科学省
※「新小学校学習指導要領におけるプログラミング教育」をご覧ください。
http://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1375607.htm


関連記事

■数値や単位を入力してください。
■変換結果
■数値や単位を入力してください。
■変換結果
  シェア・クロスバナー_300