公開日 2016.11.29

家族の困りごとを中学生の立場で解決しようとすると、「プログラミング」へつながることがある

「プログラミング」という言葉から、皆さんはどんなものを想像するでしょうか。多くの方はおそらく「コンピュータに向かって命令文を打ち込んでいる姿」でしょう。そのイメージは「プログラミング」の一部ではありますが、全体ではありません。いったい、「プログラミング」とは何なのでしょう。

◆マンガとプログラミング

あなたは絵が上手だとします。そんなあなたが「何でもいいからマンガを描いてくれ」と頼まれたとしましょう。原稿用紙に向かい、ペンを片手に持ち、さあ、マンガを描くことはできるでしょうか。マンガ家でなくてもわかりますよね。急にはできません。なぜでしょうか。

当然ですが「描きたいこと」がなければマンガは描けません。なにかテーマがあり、ストーリーを考え、設定を考え、場合によっては取材をし、構想を練り、ラフ画を描きます。いろいろな人に相談をし、ラフ画を修正し、ある程度納得できた段階でやっと、作画に移ります。まず下描きをし、読み直し、修正を加え、清書(ペン入れ)を行います。そうした工程を経てやっと「マンガの作品」として世の中に出ることになります。多くの方は「マンガを作る」という言葉からは、マンガ家やアシスタントがペン入れをしている姿を想像するでしょう。しかしそれはほんの一部なのであって、実際にはその前の作業が重要になってきます。

これと同じことがプログラミングにもいえます。プログラムを作成するにあたっては、まず「作りたいもの」がなければなりません。それを元にどのようなプログラムになるのかを考え、詳細な機能を考え、デザインを考え、それらを整理して、やっと「コーディング」と呼ばれる「コンピュータに向かって命令文を打ち込んでいく作業」に入ります。そしてそれらの命令文を読み返し、コンピュータに理解できる形に変換し、出てきたエラーを直し、実際に使ってみて、思い通りに動かない部分や不十分な部分に修正を加えて、納得できるものができあがったときに初めて「アプリ」として世の中に出ることになります。「プログラミング教育」という文面での「プログラミング」はこれらの工程すべてを指し、むしろ「コーディング」以外の部分に力点が置かれることになります。「プログラミング教育」は、決して「コーディング教育」ではありません。

上の図は、「V字モデル」と呼ばれるソフトウェア開発モデルのひとつ。「要件定義」で必要な機能などをすべて書き出す。「基本設計」で大まかな設計を行い、「詳細設計」で一つひとつの細かな機能を設計する。その上で「コーディング」を行い(デバッグもここに含まれる)、細かな機能の「単体テスト」、それぞれを1つのアプリにまとめたあとの「結合テスト」、そして実際に「アプリ」として世間に出せるかどうかを確認する「システムテスト」を行って初めて、製品として世に出る。

◆「コーディング」よりも大切なこと

売れっ子のマンガ家にはアシスタントがいます。この場合、マンガ家の仕事は「ストーリーを考え、ラフ画を描き、下描きを行う」ことでしょう。ストーリーの部分を「原作者」が行うこともあります。きちんとしたストーリーが書けるのであれば、たとえ絵が描けなくても「マンガ作成」に関わることができるということです。逆に、絵が描けてもここまでの作業がきちんとできなければ、規定のページ数におさえることもできませんし、ストーリーも筋の通らないものになりかねませんし、何よりも完成するまでにかなりの時間がかかってしまいます。もしかしたら完成すらしないかもしれません。

プログラミングでも同じことがいえます。多くの人が想像するコーディングよりも、それ以前の「設計」に当たる部分が何よりも重要です。設計が不十分なままにコーディングに移るのは、設計図が不十分なままに大工さんが家を作り始めるようなものです。設計が甘いとエラーが増え、コーディング以後のエラーを直す作業(デバッグと呼ばれます)の手間も必要以上にかかります。よくわからないままに作り始めているので、なぜエラーが起きているのかはっきりとわからない場合も少なくありません。実際に使ってみても、必要と思われる機能が備わっていなかったり、思っていたものと違うものになってしまったりするために、最初から作り直しとなってしまうことすら考えられます。ひとりでプログラミングをする場合でもチームで行う場合でも、「設計」をないがしろにすると大変なことになってしまうのです。

◆身近な人を幸せにするためのアプリを作りたい −青山柊太朗さんの場合−

実際のプログラミングの過程を、「U-22プログラミング・コンテスト2016」にて経済産業大臣賞を受賞した青山柊太朗さん(受賞当時中1)の例で見てみましょう。

青山柊太朗さんは、プロをうならせるアイデアと技術を競うプログラミングコンテストで、最高賞を受賞した

青山さんは難病のおじい様のために「わたしのお薬」というアプリを開発しました。青山さんのおじい様は毎日4種類の薬を飲んでおり、中には3時間おきに飲まねばならないものもあるそうです。これまでもスマートフォンのアラームアプリを使っていましたが、それでも飲み忘れることがあり、青山さんはそんなおじい様のために「飲み忘れを防ぐには」と考え、このアプリを開発しました。

開発するにあたり、まず、「なぜ高齢者が薬を飲み忘れるのか」を考え、3パターンに分類しました。

  1. 飲まなければならないことを忘れてしまう
  2. 飲んだのか飲んでいないのか、わからなくなる
  3. 飲みたくない・飲む気がおこらない

それぞれのパターンの解決策を考え、おじい様の意見も聞きながらデザインを考え完成させたのが「わたしのお薬」です。飲むべきお薬が文字で表示されるよりも、写真の方がわかりやすいだろう。薬を飲む際には記憶に残るように、計算をしないとアラームが止まらないようにしよう。時間を知らせるのも電子音では嫌になってしまうだろうから、孫の声で知らせることができるようにしよう。仕様を固めてからコーディングをし、完成後も、コンテストの1次審査コメントを受けてデザインを変更したり、さらにおじい様の意見を聞いて改善に努めたりしたといいます。その結果が、経済産業大臣賞でした。

受賞したアプリ「わたしのお薬」では、どの薬をいつ飲めばよいのかがわかりやすく表示されている

実は青山さんは、Z会×Make Schoolが2016年夏に開いたプログラミング講座 Summer Academyの参加者でした。これまでもプログラミングは独学をしてきましたが、Summer Academyでコーディングの基礎を学びなおしたことでコーディングの幅が広がったといいます。そして何よりも、Make School社CEOであるJeremy Rossmann氏から「世界をよくするプログラミングをしなさい」と言われたことがきっかけで、身近な人を幸せにするためのアプリを開発しようと思い至ったと語っています。

◆たとえ「コーディング」を学ばなくても

青山さんが大きく評価されたのは、コーディングの部分だけではありません。そのアイディアと問題意識、問題を解決しようとするプロセス、使う人のことを考えたデザインと機能が評価されてのことです。そして、Z会の「プログラミング教育」で身につけさせたいのは、実はこの部分なのです。もちろん、プログラミングで問題解決をするためにコーディングは欠かせません。ですからコーディングがプログラミング教育から排除されることは考えにくいでしょうが、たとえコーディングそのものを学ばなくとも「プログラミング教育」の意義は十分にあります。

繰り返しになりますが、「プログラミング教育」は「コーディング教育」ではありません。21世紀の社会を生き抜いていくために必要な力を身につける、そんな教育なのです。

<Z会×Make Schoolプログラミングスクール>
2016年12月25日(日)〜12月29日(木)の5日間で冬期講座を開講します。詳しくはこちら