【問題】すべてのマスに線が引けない!? そんなパターンが生じるのはなぜか(AERA 10月31日号より)
【問題】すべてのマスに線が引けない!? そんなパターンが生じるのはなぜか(AERA 10月31日号より)
【答え その1】マスを2色に塗り分けたとき、片方の色の数が多くなる場合があるからです(AERA 10月31日号より)
【答え その1】マスを2色に塗り分けたとき、片方の色の数が多くなる場合があるからです(AERA 10月31日号より)
【答え その2】見方をちょっと変えるだけで、問題はグッと簡単になり、コンピューターにも解きやすくなる。これがプログラミング思考です(AERA 10月31日号より)
【答え その2】見方をちょっと変えるだけで、問題はグッと簡単になり、コンピューターにも解きやすくなる。これがプログラミング思考です(AERA 10月31日号より)

「プログラミング思考とは何か」という問いに、文章で答えることは難しい。理解するには、プログラミング思考でなければ解けない練習問題にトライするのが一番だ。

 この夏、「senseicode」(センセイコード)という学校の先生に向けたサイトで、あるブログ記事が話題になった。

 タイトルは、

「『プログラミング』と『プログラミング的思考』の違いを、分かったつもりになれるヒント」

 書いたのは、同サイトの運営者、上杉周作さん(28)だ。

 米カーネギーメロン大学でコンピューターサイエンスを学び、学生時代にはApple、facebook(アップル、フェイスブック)などの企業でプログラマーを経験。現在、シリコンバレーにある教育関係のメディア企業で働く。

 記事のきっかけになったのは今年5月から6月にかけて、文部科学省が行った小学生のプログラミング教育に関する有識者会議だった。

「会議ではプログラミング言語そのものを教えるのではなく、コンピューター的な考え方、つまりプログラミング思考を教えるべきだという声が上がったそうです。では、プログラミング思考とは何か。そう悩む先生たちのヒントになればと思い、クイズを使って、解説記事を書きました」(上杉さん)

●「見方を変える」が第一歩

 ここで「ヒント」として紹介されている問題が、「すべてのマスにルール通りの線が引けるように、マス目のどこかに二つの×を書き込む」だ。

適当に×を書き込むと、ルール通りに線が引けるときと引けないときがあることがわかる。×の位置を変えながらすべてのパターンを試していけば答えはわかるが、

「こうした“力ワザ”は、プログラミングが得意とするところ。とはいえ、マス目が増えるとコンピューターでさえ計算に時間がかかる。それに、なぜマスが埋まるのか、埋まらないのか、コンピューターは教えてくれません」(同)

 ところが、マス目をチェスボードのように交互に塗りつぶしてから問題を解いてみると……答えはもちろん、なぜそうなるのかが、あれよあれよと見えてくる。

「力ワザで答えを探すのではなく、マスを塗ってみるなど問題の見方を変えると、プログラムはグッとシンプルになります。コンピューターの計算時間も短くなる。この『見方を変える』という発想が、プログラミング思考の第一歩なんですね」(同)

(ライター・福光恵)

AERA 2016年10月31日号