2020年から小学校で「プログラミング教育」が必修になります。
もし、子供から
「プログラミングってなに?」
と聞かれた場合、あなたは何と説明しますか?
この記事では、そんな「プログラミング」について具体例を上げて分かりやすく解説していきます。
また、文部科学省は、「プログラミング教育」を通じて、コンピューターを操作する「プログラミング技術」の習得を目指すだけでなく、「プログラミング的思考」を身につけさせようとしています。
この「プログラミング的思考」についても、何かを考えてみましょう。
プログラミングとは何か?
プログラミングを簡単に言うと、「社長であるあなたが、「コンピューター君」を雇い、仕事の命令をする事」です。
Wikipediaでは、以下の様な定義になっていますが、同じことを言っているのが分かりますでしょうか?
コンピュータのプログラミング(programming)とは、コンピュータプログラムを作成することにより、人間の意図した処理を行うようにコンピュータに指示を与える行為である。
出典:wikipedia
この命令の出し方にも色々な種類があって、それが「プログラミング言語」の違いになります。
それでは、具体的な「命令」の仕方を見る前に、コンピューター君の長所と短所を見てみましょう。
コンピューター君の優れた所
コンピュータ君は、言われた仕事は「100%」必ず実行してくれます。
また、365日、24時間無休で働いてくれます。
これが、人間だったらそうはいきませんよね。
「社長、働かせすぎです!」
と文句を言うことも、
「成果が出たので給料もっと下さい!」
と直訴してくる事もありません。
電気代だけで、黙々と働いてくれますし、もちろん、労働組合を結成して、ストライキを行う事もありません。
コンピューター君を雇って生み出された「利益」は全てあなたの懐に入ります。ガッポガッポですね。
お望みであれば、究極のブラック企業の社長として君臨できる訳です。
コンピューター君の弱点
ただ、この「コンピューター君」にも弱点があります。
それは、「言われた事しか出来ない」という事です。
正しく指示をしてあげないと、
「あなたの言っていること、ワケ分かりませーん」
と言って、途中で仕事を放棄してしまいます。(エラーを出します)
また、想定外のトラブルに弱いです。
状況を判断したり、社長のあなたの意向を考えて、「よしな」に対応する事が出来ません。
ですので、社長のあなたは、ありそうなトラブルを考えて事前に指示を出しておかなくてはいけません。
コンピューターへの指示の出し方の基本は3種類
コンピューターの指示の出し方には、基本があります。そして、たったの3種類だけ覚えればOKです。
- 手順がある→順次
- 規則性がある→繰り返し
- 条件がある→条件分岐
どんなプログラミング言語でも、この3つの指示の出し方が基本で、最初に習います。この事を「手続き型プログラミング」と言います。
それでは、3種類の指示の出し方をみていきましょう。
プログラミングの基本1:順番に実行
「Aをしたら、Bをする」、「BをしたらCをする」と順番に命令を実行することです。
コンピューター君にお願いしたい事は大抵の場合、複数あるので、順番を考えてお願いしていきます。
順次の例
例えば、コンピューター君に、毎月の「売上」を集計し、報告する会議の資料作成をお願いする事を考えます。
コンピューター君に指示を出すとしたら、こんな感じでしょうか?
- 指示1:今月の売上数字を集めて
- 指示2:ファイルから先月の売上数字を探して
- 指示3:今月の売上と先月の売上を比較してレポートにして
- 指示4:レポートの結果を印刷して会議の参加者に配って
- 指示5:今月の売上数字をファイルに保管して
指示5は来月の会議に向けて数字を保管して貰う命令です。
プログラミングの基本2:繰り返し
先ほどの会議資料作成のお願い、「コンピューター君」は、基本的に1回実行したら終わりです。
また来月、同じ命令をしなくてはいけません。ですが、毎月、毎月、同じ命令をするのは面倒くさいですよね。
ですので、繰り返し同じ事をする命令を追加します。
- 指示1:今月の売上数字を集めて
- 指示2:ファイルから先月の売上数字を探して
- 指示3:今月の売上と先月の売上を比較してレポートにして
- 指示4:レポートの結果を印刷して会議の参加者に配って
- 指示5:今月の売上数字をファイルに保管して
- 指示6:指示1ー5を毎月繰り返して
プログラミングでは、for文で書かれ、繰り返しの数などを指定する事が出来ます。
指示の出し方の基本3:条件分岐
これで、メデタシメデタシでしょうか?
実は、「落とし穴」があります。
例えば、売上を報告する会議が毎月1日に予定されていたとします。ですが、1日が休日だった場合はどうでしょうか?
休日にレポートの結果を印刷して参加者に配ろうとしても、誰もいなく、コンピューター君は途方に暮れてしまいます。
ですので、以下の命令を追加してあげる必要があります。
- 指示1:今月の売上数字を集めて
- 指示2:ファイルから先月の売上数字を探して
- 指示3:今月の売上と先月の売上を比較してレポートにして
- 指示4−1:1日が平日ならレポートの結果を印刷して会議の参加者に配って
- 指示4−2:1日が休日なら平日まで待って、レポートの結果を印刷して会議の参加者に配って
- 指示5:今月の売上数字をファイルに保管して
- 指示6:指示1ー5を毎月繰り返して
これだと、コンピューター君は、まだ休日出勤ですが(笑)イメージは伝わったでしょうか?
プログラミング思考とは何か?
それでは、「プログラミング」が分かった所で、「プログラミング思考」が何かについて考えてみましょう。
ここで、文部省が発表した「プログラミング教育の手引き」を見てみましょう。
自分が意図する一連の活動を実現するために、どのような動きの組み合わせが必要であり、一つ一つの動きに対応した記号を、どの様に組み合わせたらいいのか、記号の組み合わせをどの様に改善していけば、より意図した活動に近づくのかといったことを論理的に考えていく力。
「記号の組み合わせ」とか、少々分かりにくいですが、要は、「コンピューター君」への指示の出し方の基本を踏まえて、どの様にしたら、「コンピューター君」が無駄なく効率的に働けるかを考える力と言えます。
プログラミング的思考より更に大切な力とは?
この「プログラミング的思考」の前に、「課題の設定」、つまり、何をお願いするかが実は更に大切です。
なぜなら、「コンピューター君」は、どんな意味のない課題でも、忠実に実行しようとするからです。
これからの時代は、どの様にやるかを指示する「プログラミング的思考」だけでなく、そもそも何をお願いするかという「課題設定力」が最も大切な力になります。
この「問いを立てる力」は、今のコンピューターでは出来ません、
ですので、今後もコンピューターでなく、人間が主導していく事になります。
まとめ
「プログラミングとは何か?」、「プログラミング思考とは何か?」について考えてきましたが、いかがでしょうか?
「プログラミング」とは、「コンピューター君」を雇い、命令を出す事です。そして、その命令の出し方には、3つの基礎がある事を理解して頂けたと思います。
なので、プログラミング言語を一つマスターすると、他の言語も比較的スムーズにマスター出来るというカラクリも分かってきたと思います。
「コンピューター君」にお願いする事が複雑になって、命令が沢山必要になったり、「コンピューター君」が沢山の人からお願いをされる様になると、「オブジェクト指向」という更に高度な考え方が必要になってきます。
オブジェクト指向については、また機会があれば解説します。